From aacd348637e38795dd7ae3c7c8c908d8c0cd24fd Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Thu, 27 Feb 2014 22:03:25 -0500 Subject: rename superh port to "sh" for consistency linux, gcc, etc. all use "sh" as the name for the superh arch. there was already some inconsistency internally in musl: the dynamic linker was searching for "ld-musl-sh.path" as its path file despite its own name being "ld-musl-superh.so.1". there was some sentiment in both directions as to how to resolve the inconsistency, but overall "sh" was favored. --- src/fenv/sh/fenv.s | 74 +++++++++++++++++++++++++++++++++++ src/fenv/superh/fenv.s | 74 ----------------------------------- src/internal/sh/syscall.s | 22 +++++++++++ src/internal/superh/syscall.s | 22 ----------- src/ldso/sh/dlsym.s | 10 +++++ src/ldso/sh/start.s | 26 ++++++++++++ src/ldso/superh/dlsym.s | 10 ----- src/ldso/superh/start.s | 26 ------------ src/setjmp/sh/longjmp.s | 26 ++++++++++++ src/setjmp/sh/setjmp.s | 25 ++++++++++++ src/setjmp/superh/longjmp.s | 26 ------------ src/setjmp/superh/setjmp.s | 25 ------------ src/signal/sh/restore.s | 24 ++++++++++++ src/signal/sh/sigsetjmp.s | 27 +++++++++++++ src/signal/superh/restore.s | 24 ------------ src/signal/superh/sigsetjmp.s | 27 ------------- src/thread/sh/__set_thread_area.s | 5 +++ src/thread/sh/__unmapself.s | 22 +++++++++++ src/thread/sh/clone.s | 47 ++++++++++++++++++++++ src/thread/sh/syscall_cp.s | 39 ++++++++++++++++++ src/thread/superh/__set_thread_area.s | 5 --- src/thread/superh/__unmapself.s | 22 ----------- src/thread/superh/clone.s | 47 ---------------------- src/thread/superh/syscall_cp.s | 39 ------------------ src/unistd/sh/pipe.s | 27 +++++++++++++ src/unistd/superh/pipe.s | 27 ------------- 26 files changed, 374 insertions(+), 374 deletions(-) create mode 100644 src/fenv/sh/fenv.s delete mode 100644 src/fenv/superh/fenv.s create mode 100644 src/internal/sh/syscall.s delete mode 100644 src/internal/superh/syscall.s create mode 100644 src/ldso/sh/dlsym.s create mode 100644 src/ldso/sh/start.s delete mode 100644 src/ldso/superh/dlsym.s delete mode 100644 src/ldso/superh/start.s create mode 100644 src/setjmp/sh/longjmp.s create mode 100644 src/setjmp/sh/setjmp.s delete mode 100644 src/setjmp/superh/longjmp.s delete mode 100644 src/setjmp/superh/setjmp.s create mode 100644 src/signal/sh/restore.s create mode 100644 src/signal/sh/sigsetjmp.s delete mode 100644 src/signal/superh/restore.s delete mode 100644 src/signal/superh/sigsetjmp.s create mode 100644 src/thread/sh/__set_thread_area.s create mode 100644 src/thread/sh/__unmapself.s create mode 100644 src/thread/sh/clone.s create mode 100644 src/thread/sh/syscall_cp.s delete mode 100644 src/thread/superh/__set_thread_area.s delete mode 100644 src/thread/superh/__unmapself.s delete mode 100644 src/thread/superh/clone.s delete mode 100644 src/thread/superh/syscall_cp.s create mode 100644 src/unistd/sh/pipe.s delete mode 100644 src/unistd/superh/pipe.s (limited to 'src') diff --git a/src/fenv/sh/fenv.s b/src/fenv/sh/fenv.s new file mode 100644 index 00000000..7f5c6277 --- /dev/null +++ b/src/fenv/sh/fenv.s @@ -0,0 +1,74 @@ +.global fegetround +.type fegetround, @function +fegetround: + sts fpscr, r0 + rts + and #3, r0 + +.global __fesetround +.type __fesetround, @function +__fesetround: + sts fpscr, r0 + or r4, r0 + lds r0, fpscr + rts + mov #0, r0 + +.global fetestexcept +.type fetestexcept, @function +fetestexcept: + sts fpscr, r0 + and r4, r0 + rts + and #0x7c, r0 + +.global feclearexcept +.type feclearexcept, @function +feclearexcept: + mov r4, r0 + and #0x7c, r0 + not r0, r4 + sts fpscr, r0 + and r4, r0 + lds r0, fpscr + rts + mov #0, r0 + +.global feraiseexcept +.type feraiseexcept, @function +feraiseexcept: + mov r4, r0 + and #0x7c, r0 + sts fpscr, r4 + or r4, r0 + lds r0, fpscr + rts + mov #0, r0 + +.global fegetenv +.type fegetenv, @function +fegetenv: + sts fpscr, r0 + mov.l r0, @r4 + rts + mov #0, r0 + +.global fesetenv +.type fesetenv, @function +fesetenv: + mov r4, r0 + cmp/eq #-1, r0 + bf 1f + + ! the default environment is complicated by the fact that we need to + ! preserve the current precision bit, which we do not know a priori + sts fpscr, r0 + mov #8, r1 + swap.w r1, r1 + bra 2f + and r1, r0 + +1: mov.l @r4, r0 ! non-default environment +2: lds r0, fpscr + rts + mov #0, r0 diff --git a/src/fenv/superh/fenv.s b/src/fenv/superh/fenv.s deleted file mode 100644 index 7f5c6277..00000000 --- a/src/fenv/superh/fenv.s +++ /dev/null @@ -1,74 +0,0 @@ -.global fegetround -.type fegetround, @function -fegetround: - sts fpscr, r0 - rts - and #3, r0 - -.global __fesetround -.type __fesetround, @function -__fesetround: - sts fpscr, r0 - or r4, r0 - lds r0, fpscr - rts - mov #0, r0 - -.global fetestexcept -.type fetestexcept, @function -fetestexcept: - sts fpscr, r0 - and r4, r0 - rts - and #0x7c, r0 - -.global feclearexcept -.type feclearexcept, @function -feclearexcept: - mov r4, r0 - and #0x7c, r0 - not r0, r4 - sts fpscr, r0 - and r4, r0 - lds r0, fpscr - rts - mov #0, r0 - -.global feraiseexcept -.type feraiseexcept, @function -feraiseexcept: - mov r4, r0 - and #0x7c, r0 - sts fpscr, r4 - or r4, r0 - lds r0, fpscr - rts - mov #0, r0 - -.global fegetenv -.type fegetenv, @function -fegetenv: - sts fpscr, r0 - mov.l r0, @r4 - rts - mov #0, r0 - -.global fesetenv -.type fesetenv, @function -fesetenv: - mov r4, r0 - cmp/eq #-1, r0 - bf 1f - - ! the default environment is complicated by the fact that we need to - ! preserve the current precision bit, which we do not know a priori - sts fpscr, r0 - mov #8, r1 - swap.w r1, r1 - bra 2f - and r1, r0 - -1: mov.l @r4, r0 ! non-default environment -2: lds r0, fpscr - rts - mov #0, r0 diff --git a/src/internal/sh/syscall.s b/src/internal/sh/syscall.s new file mode 100644 index 00000000..a8fda1c0 --- /dev/null +++ b/src/internal/sh/syscall.s @@ -0,0 +1,22 @@ +.global __syscall +.type __syscall, @function +__syscall: + ! The kernel syscall entry point documents that the trap number indicates + ! the number of arguments being passed, but it then ignores that information. + ! Since we do not actually know how many arguments are being passed, we will + ! say there are six, since that is the maximum we support here. + mov r4, r3 + mov r5, r4 + mov r6, r5 + mov r7, r6 + mov.l @r15, r7 + mov.l @(4,r15), r0 + mov.l @(8,r15), r1 + trapa #22 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + rts + nop diff --git a/src/internal/superh/syscall.s b/src/internal/superh/syscall.s deleted file mode 100644 index a8fda1c0..00000000 --- a/src/internal/superh/syscall.s +++ /dev/null @@ -1,22 +0,0 @@ -.global __syscall -.type __syscall, @function -__syscall: - ! The kernel syscall entry point documents that the trap number indicates - ! the number of arguments being passed, but it then ignores that information. - ! Since we do not actually know how many arguments are being passed, we will - ! say there are six, since that is the maximum we support here. - mov r4, r3 - mov r5, r4 - mov r6, r5 - mov r7, r6 - mov.l @r15, r7 - mov.l @(4,r15), r0 - mov.l @(8,r15), r1 - trapa #22 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - rts - nop diff --git a/src/ldso/sh/dlsym.s b/src/ldso/sh/dlsym.s new file mode 100644 index 00000000..8258507f --- /dev/null +++ b/src/ldso/sh/dlsym.s @@ -0,0 +1,10 @@ +.text +.global dlsym +.type dlsym, @function +dlsym: + mov.l L1, r0 + braf r0 +1: mov.l @r15, r6 + +.align 2 +L1: .long __dlsym@PLT-(1b-.) diff --git a/src/ldso/sh/start.s b/src/ldso/sh/start.s new file mode 100644 index 00000000..ca6b7fc9 --- /dev/null +++ b/src/ldso/sh/start.s @@ -0,0 +1,26 @@ +.text +.global _start +.type _start, @function +_start: + mov.l @r15, r4 + mov r15, r5 + mov.l L1, r0 + bsrf r0 + add #4, r5 + +2: mov r0, r2 + mov.l @r15+, r1 +1: mov.l @r15+, r0 + cmp/eq #-1, r0 + bt/s 1b + add #-1, r1 + + add #1, r1 + mov.l r0, @-r15 + mov.l r1, @-r15 + mov #0, r4 + jmp @r2 + nop + +.align 2 +L1: .long __dynlink@PLT-(2b-.) diff --git a/src/ldso/superh/dlsym.s b/src/ldso/superh/dlsym.s deleted file mode 100644 index 8258507f..00000000 --- a/src/ldso/superh/dlsym.s +++ /dev/null @@ -1,10 +0,0 @@ -.text -.global dlsym -.type dlsym, @function -dlsym: - mov.l L1, r0 - braf r0 -1: mov.l @r15, r6 - -.align 2 -L1: .long __dlsym@PLT-(1b-.) diff --git a/src/ldso/superh/start.s b/src/ldso/superh/start.s deleted file mode 100644 index ca6b7fc9..00000000 --- a/src/ldso/superh/start.s +++ /dev/null @@ -1,26 +0,0 @@ -.text -.global _start -.type _start, @function -_start: - mov.l @r15, r4 - mov r15, r5 - mov.l L1, r0 - bsrf r0 - add #4, r5 - -2: mov r0, r2 - mov.l @r15+, r1 -1: mov.l @r15+, r0 - cmp/eq #-1, r0 - bt/s 1b - add #-1, r1 - - add #1, r1 - mov.l r0, @-r15 - mov.l r1, @-r15 - mov #0, r4 - jmp @r2 - nop - -.align 2 -L1: .long __dynlink@PLT-(2b-.) diff --git a/src/setjmp/sh/longjmp.s b/src/setjmp/sh/longjmp.s new file mode 100644 index 00000000..e9aa4e50 --- /dev/null +++ b/src/setjmp/sh/longjmp.s @@ -0,0 +1,26 @@ +.global _longjmp +.global longjmp +.type _longjmp, @function +.type longjmp, @function +_longjmp: +longjmp: + mov.l @r4+, r8 + mov.l @r4+, r9 + mov.l @r4+, r10 + mov.l @r4+, r11 + mov.l @r4+, r12 + mov.l @r4+, r13 + mov.l @r4+, r14 + mov.l @r4+, r15 + lds.l @r4+, pr + fmov.s @r4+, fr12 + fmov.s @r4+, fr13 + fmov.s @r4+, fr14 + fmov.s @r4+, fr15 + + tst r5, r5 + movt r0 + add r5, r0 + + rts + nop diff --git a/src/setjmp/sh/setjmp.s b/src/setjmp/sh/setjmp.s new file mode 100644 index 00000000..6127ed90 --- /dev/null +++ b/src/setjmp/sh/setjmp.s @@ -0,0 +1,25 @@ +.global __setjmp +.global _setjmp +.global setjmp +.type __setjmp, @function +.type _setjmp, @function +.type setjmp, @function +__setjmp: +_setjmp: +setjmp: + add #52, r4 + fmov.s fr15, @-r4 + fmov.s fr14, @-r4 + fmov.s fr13, @-r4 + fmov.s fr12, @-r4 + sts.l pr, @-r4 + mov.l r15 @-r4 + mov.l r14, @-r4 + mov.l r13, @-r4 + mov.l r12, @-r4 + mov.l r11, @-r4 + mov.l r10, @-r4 + mov.l r9, @-r4 + mov.l r8, @-r4 + rts + mov #0, r0 diff --git a/src/setjmp/superh/longjmp.s b/src/setjmp/superh/longjmp.s deleted file mode 100644 index e9aa4e50..00000000 --- a/src/setjmp/superh/longjmp.s +++ /dev/null @@ -1,26 +0,0 @@ -.global _longjmp -.global longjmp -.type _longjmp, @function -.type longjmp, @function -_longjmp: -longjmp: - mov.l @r4+, r8 - mov.l @r4+, r9 - mov.l @r4+, r10 - mov.l @r4+, r11 - mov.l @r4+, r12 - mov.l @r4+, r13 - mov.l @r4+, r14 - mov.l @r4+, r15 - lds.l @r4+, pr - fmov.s @r4+, fr12 - fmov.s @r4+, fr13 - fmov.s @r4+, fr14 - fmov.s @r4+, fr15 - - tst r5, r5 - movt r0 - add r5, r0 - - rts - nop diff --git a/src/setjmp/superh/setjmp.s b/src/setjmp/superh/setjmp.s deleted file mode 100644 index 6127ed90..00000000 --- a/src/setjmp/superh/setjmp.s +++ /dev/null @@ -1,25 +0,0 @@ -.global __setjmp -.global _setjmp -.global setjmp -.type __setjmp, @function -.type _setjmp, @function -.type setjmp, @function -__setjmp: -_setjmp: -setjmp: - add #52, r4 - fmov.s fr15, @-r4 - fmov.s fr14, @-r4 - fmov.s fr13, @-r4 - fmov.s fr12, @-r4 - sts.l pr, @-r4 - mov.l r15 @-r4 - mov.l r14, @-r4 - mov.l r13, @-r4 - mov.l r12, @-r4 - mov.l r11, @-r4 - mov.l r10, @-r4 - mov.l r9, @-r4 - mov.l r8, @-r4 - rts - mov #0, r0 diff --git a/src/signal/sh/restore.s b/src/signal/sh/restore.s new file mode 100644 index 00000000..ab26034b --- /dev/null +++ b/src/signal/sh/restore.s @@ -0,0 +1,24 @@ +.global __restore +.type __restore, @function +__restore: + mov #119, r3 !__NR_sigreturn + trapa #16 + + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + +.global __restore_rt +.type __restore_rt, @function +__restore_rt: + mov #100, r3 !__NR_rt_sigreturn + add #73, r3 + trapa #16 + + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 diff --git a/src/signal/sh/sigsetjmp.s b/src/signal/sh/sigsetjmp.s new file mode 100644 index 00000000..f6cae801 --- /dev/null +++ b/src/signal/sh/sigsetjmp.s @@ -0,0 +1,27 @@ +.global sigsetjmp +.type sigsetjmp, @function +sigsetjmp: + mov.l r5, @(36,r4) + tst r5, r5 + bf 2f + + sts.l pr, @-r15 + mov.l r4, @-r15 + mov r4, r6 + add #40, r6 + mov #0, r5 + mov #2, r4 + mov.l L1, r0 + bsrf r0 + nop +1: mov.l @r15+, r4 + lds.l @r15+, pr + +2: mov.l L2, r0 + braf r0 + nop +3: + +.align 2 +L1: .long pthread_sigmask@PLT-(1b-.) +L2: .long setjmp@PLT-(3b-.) diff --git a/src/signal/superh/restore.s b/src/signal/superh/restore.s deleted file mode 100644 index ab26034b..00000000 --- a/src/signal/superh/restore.s +++ /dev/null @@ -1,24 +0,0 @@ -.global __restore -.type __restore, @function -__restore: - mov #119, r3 !__NR_sigreturn - trapa #16 - - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - -.global __restore_rt -.type __restore_rt, @function -__restore_rt: - mov #100, r3 !__NR_rt_sigreturn - add #73, r3 - trapa #16 - - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 diff --git a/src/signal/superh/sigsetjmp.s b/src/signal/superh/sigsetjmp.s deleted file mode 100644 index f6cae801..00000000 --- a/src/signal/superh/sigsetjmp.s +++ /dev/null @@ -1,27 +0,0 @@ -.global sigsetjmp -.type sigsetjmp, @function -sigsetjmp: - mov.l r5, @(36,r4) - tst r5, r5 - bf 2f - - sts.l pr, @-r15 - mov.l r4, @-r15 - mov r4, r6 - add #40, r6 - mov #0, r5 - mov #2, r4 - mov.l L1, r0 - bsrf r0 - nop -1: mov.l @r15+, r4 - lds.l @r15+, pr - -2: mov.l L2, r0 - braf r0 - nop -3: - -.align 2 -L1: .long pthread_sigmask@PLT-(1b-.) -L2: .long setjmp@PLT-(3b-.) diff --git a/src/thread/sh/__set_thread_area.s b/src/thread/sh/__set_thread_area.s new file mode 100644 index 00000000..53887e64 --- /dev/null +++ b/src/thread/sh/__set_thread_area.s @@ -0,0 +1,5 @@ +.global __set_thread_area +.type __set_thread_area, @function +__set_thread_area: + rts + ldc r4, gbr diff --git a/src/thread/sh/__unmapself.s b/src/thread/sh/__unmapself.s new file mode 100644 index 00000000..b34c3c80 --- /dev/null +++ b/src/thread/sh/__unmapself.s @@ -0,0 +1,22 @@ +.text +.global __unmapself +.type __unmapself, @function +__unmapself: + mov #91, r3 ! SYS_munmap + trapa #18 + + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + + mov #1, r3 ! SYS_exit + mov #0, r4 + trapa #17 + + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 diff --git a/src/thread/sh/clone.s b/src/thread/sh/clone.s new file mode 100644 index 00000000..d6c9184d --- /dev/null +++ b/src/thread/sh/clone.s @@ -0,0 +1,47 @@ +.text +.global __clone +.type __clone, @function +__clone: +! incoming: fn stack flags arg ptid tls ctid +! r4 r5 r6 r7 @r15 @(4,r15) @(8,r15) + + mov #-16, r0 + and r0, r5 + + mov r4, r1 ! r1 = fn + mov r7, r2 ! r2 = arg + + mov #120, r3 ! r3 = __NR_clone + mov r6, r4 ! r4 = flags + !mov r5, r5 ! r5 = stack + mov.l @r15, r6 ! r6 = ptid + mov.l @(8,r15), r7 ! r7 = ctid + mov.l @(4,r15), r0 ! r0 = tls + trapa #21 + + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + + cmp/eq #0, r0 + bt 1f + + ! we are the parent, return + rts + nop + +1: ! we are the child, call fn(arg) + jsr @r1 + mov r2, r4 + + mov #1, r3 ! __NR_exit + mov r0, r4 + trapa #17 + + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 diff --git a/src/thread/sh/syscall_cp.s b/src/thread/sh/syscall_cp.s new file mode 100644 index 00000000..5677b9c0 --- /dev/null +++ b/src/thread/sh/syscall_cp.s @@ -0,0 +1,39 @@ +.text +.global __syscall_cp_asm +.type __syscall_cp_asm, @function +__syscall_cp_asm: + +.global __cp_begin +__cp_begin: + mov.l @r4, r4 + tst r4, r4 + bt 2f + + mov.l L1, r0 + braf r0 + nop +1: + +.align 2 +L1: .long __cancel@PLT-(1b-.) + +2: mov r5, r3 + mov r6, r4 + mov r7, r5 + mov.l @r15, r6 + mov.l @(4,r15), r7 + mov.l @(8,r15), r0 + mov.l @(12,r15), r1 + trapa #22 + +.global __cp_end +__cp_end: + ! work around hardware bug + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + + rts + nop diff --git a/src/thread/superh/__set_thread_area.s b/src/thread/superh/__set_thread_area.s deleted file mode 100644 index 53887e64..00000000 --- a/src/thread/superh/__set_thread_area.s +++ /dev/null @@ -1,5 +0,0 @@ -.global __set_thread_area -.type __set_thread_area, @function -__set_thread_area: - rts - ldc r4, gbr diff --git a/src/thread/superh/__unmapself.s b/src/thread/superh/__unmapself.s deleted file mode 100644 index b34c3c80..00000000 --- a/src/thread/superh/__unmapself.s +++ /dev/null @@ -1,22 +0,0 @@ -.text -.global __unmapself -.type __unmapself, @function -__unmapself: - mov #91, r3 ! SYS_munmap - trapa #18 - - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - - mov #1, r3 ! SYS_exit - mov #0, r4 - trapa #17 - - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 diff --git a/src/thread/superh/clone.s b/src/thread/superh/clone.s deleted file mode 100644 index d6c9184d..00000000 --- a/src/thread/superh/clone.s +++ /dev/null @@ -1,47 +0,0 @@ -.text -.global __clone -.type __clone, @function -__clone: -! incoming: fn stack flags arg ptid tls ctid -! r4 r5 r6 r7 @r15 @(4,r15) @(8,r15) - - mov #-16, r0 - and r0, r5 - - mov r4, r1 ! r1 = fn - mov r7, r2 ! r2 = arg - - mov #120, r3 ! r3 = __NR_clone - mov r6, r4 ! r4 = flags - !mov r5, r5 ! r5 = stack - mov.l @r15, r6 ! r6 = ptid - mov.l @(8,r15), r7 ! r7 = ctid - mov.l @(4,r15), r0 ! r0 = tls - trapa #21 - - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - - cmp/eq #0, r0 - bt 1f - - ! we are the parent, return - rts - nop - -1: ! we are the child, call fn(arg) - jsr @r1 - mov r2, r4 - - mov #1, r3 ! __NR_exit - mov r0, r4 - trapa #17 - - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 diff --git a/src/thread/superh/syscall_cp.s b/src/thread/superh/syscall_cp.s deleted file mode 100644 index 5677b9c0..00000000 --- a/src/thread/superh/syscall_cp.s +++ /dev/null @@ -1,39 +0,0 @@ -.text -.global __syscall_cp_asm -.type __syscall_cp_asm, @function -__syscall_cp_asm: - -.global __cp_begin -__cp_begin: - mov.l @r4, r4 - tst r4, r4 - bt 2f - - mov.l L1, r0 - braf r0 - nop -1: - -.align 2 -L1: .long __cancel@PLT-(1b-.) - -2: mov r5, r3 - mov r6, r4 - mov r7, r5 - mov.l @r15, r6 - mov.l @(4,r15), r7 - mov.l @(8,r15), r0 - mov.l @(12,r15), r1 - trapa #22 - -.global __cp_end -__cp_end: - ! work around hardware bug - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - - rts - nop diff --git a/src/unistd/sh/pipe.s b/src/unistd/sh/pipe.s new file mode 100644 index 00000000..d865ae3a --- /dev/null +++ b/src/unistd/sh/pipe.s @@ -0,0 +1,27 @@ +.global pipe +.type pipe, @function +pipe: + mov #42, r3 + trapa #17 + + ! work around hardware bug + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + or r0, r0 + + cmp/pz r0 + bt 1f + + mov.l L1, r1 + braf r1 + mov r0, r4 + +1: mov.l r0, @(0,r4) + mov.l r1, @(4,r4) + rts + mov #0, r0 + +.align 2 +L1: .long __syscall_ret@PLT-(1b-.) diff --git a/src/unistd/superh/pipe.s b/src/unistd/superh/pipe.s deleted file mode 100644 index d865ae3a..00000000 --- a/src/unistd/superh/pipe.s +++ /dev/null @@ -1,27 +0,0 @@ -.global pipe -.type pipe, @function -pipe: - mov #42, r3 - trapa #17 - - ! work around hardware bug - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - or r0, r0 - - cmp/pz r0 - bt 1f - - mov.l L1, r1 - braf r1 - mov r0, r4 - -1: mov.l r0, @(0,r4) - mov.l r1, @(4,r4) - rts - mov #0, r0 - -.align 2 -L1: .long __syscall_ret@PLT-(1b-.) -- cgit v1.2.1