diff --git a/src/kernel/libroot/os/arch/m68k/syscalls.inc b/src/kernel/libroot/os/arch/m68k/syscalls.inc new file mode 100644 index 0000000000..5db2e2d663 --- /dev/null +++ b/src/kernel/libroot/os/arch/m68k/syscalls.inc @@ -0,0 +1,53 @@ +/* +** Copyright 2002, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the NewOS License. +*/ + +/* +** arg layout: +** r4-r7: arg 1 - 4 +** r0-r3: arg 5 - 8 +** r8-r13: arg 8 - 13 +*/ +#define FUNC(name) .align 2 ; .globl _##name ; .type _##name,@function ; _##name: + +#define SYSCALL0(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL1(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL2(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL3(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL4(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL5(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL6(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL7(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL8(name, n) \ +FUNC(name) \ + rts + +#define SYSCALL9(name, n) \ +FUNC(name) \ + rts + diff --git a/src/kernel/libroot/os/arch/mips/syscalls.inc b/src/kernel/libroot/os/arch/mips/syscalls.inc new file mode 100644 index 0000000000..971281aeaa --- /dev/null +++ b/src/kernel/libroot/os/arch/mips/syscalls.inc @@ -0,0 +1,23 @@ +/* +** Copyright 2001, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the NewOS License. +*/ +#define SYSCALL0(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL1(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL2(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL3(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL4(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL5(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL6(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL7(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL8(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL9(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL10(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL11(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL12(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL13(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL14(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL15(name, number) .align 2 ; .globl name ; .type name,@function ; name: +#define SYSCALL16(name, number) .align 2 ; .globl name ; .type name,@function ; name: + + diff --git a/src/kernel/libroot/os/arch/ppc/syscalls.inc b/src/kernel/libroot/os/arch/ppc/syscalls.inc new file mode 100644 index 0000000000..39cd477489 --- /dev/null +++ b/src/kernel/libroot/os/arch/ppc/syscalls.inc @@ -0,0 +1,64 @@ +/* +** Copyright 2001, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the NewOS License. +*/ +#define SYSCALL0(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL1(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL2(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL3(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL4(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL5(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL6(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL7(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL8(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + +#define SYSCALL9(name, n) \ +.globl name; \ +.type name,@function; \ +.align 4; \ +name: + diff --git a/src/kernel/libroot/os/arch/sh4/atomic.c b/src/kernel/libroot/os/arch/sh4/atomic.c new file mode 100644 index 0000000000..dcb5522388 --- /dev/null +++ b/src/kernel/libroot/os/arch/sh4/atomic.c @@ -0,0 +1,32 @@ +/* +** Copyright 2002, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the NewOS License. +*/ +#include +#include + +int atomic_add(int *val, int incr) +{ + return sys_atomic_add(val, incr); +} + +int atomic_and(int *val, int incr) +{ + return sys_atomic_and(val, incr); +} + +int atomic_or(int *val, int incr) +{ + return sys_atomic_or(val, incr); +} + +int atomic_set(int *val, int set_to) +{ + return sys_atomic_set(val, set_to); +} + +int test_and_set(int *val, int set_to, int test_val) +{ + return sys_test_and_set(val, set_to, test_val); +} + diff --git a/src/kernel/libroot/os/arch/sh4/syscalls.inc b/src/kernel/libroot/os/arch/sh4/syscalls.inc new file mode 100644 index 0000000000..6495d695af --- /dev/null +++ b/src/kernel/libroot/os/arch/sh4/syscalls.inc @@ -0,0 +1,97 @@ +/* +** Copyright 2001, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the NewOS License. +*/ + +/* +** arg layout: +** r4-r7: arg 1 - 4 +** r0-r3: arg 5 - 8 +** r8-r13: arg 8 - 13 +*/ +#define FUNC(name) .align 2 ; .globl _##name ; .type _##name,@function ; _##name: + +#define SYSCALL0(name, n) \ +FUNC(name) \ + trapa #(n); \ + nop; \ + rts; \ + nop; + +#define SYSCALL1(name, n) \ +FUNC(name) \ + trapa #(n); \ + rts; \ + nop; + +#define SYSCALL2(name, n) \ +FUNC(name) \ + trapa #(n); \ + nop; \ + rts; \ + nop; + +#define SYSCALL3(name, n) \ +FUNC(name) \ + trapa #(n); \ + nop; \ + rts; \ + nop; + +#define SYSCALL4(name, n) \ +FUNC(name) \ + trapa #(n); \ + nop; \ + rts; \ + nop; \ + +#define SYSCALL5(name, n) \ +FUNC(name) \ + mov.l @r15,r0; \ + trapa #(n); \ + nop; \ + rts; \ + nop; + +#define SYSCALL6(name, n) \ +FUNC(name) \ + mov.l @(0,r15),r0; \ + mov.l @(4,r15),r1; \ + trapa #(n); \ + nop; \ + rts; \ + nop; +#define SYSCALL7(name, n) \ +FUNC(name) \ + mov.l @(0,r15),r0; \ + mov.l @(4,r15),r1; \ + mov.l @(8,r15),r2; \ + trapa #(n); \ + nop; \ + rts; \ + nop; + +#define SYSCALL8(name, n) \ +FUNC(name) \ + mov.l @(0,r15),r0; \ + mov.l @(4,r15),r1; \ + mov.l @(8,r15),r2; \ + mov.l @(12,r15),r3; \ + trapa #(n); \ + nop; \ + rts; \ + nop; + +#define SYSCALL9(name, n) \ +FUNC(name) \ + mov.l @(0,r15),r0; \ + mov.l @(4,r15),r1; \ + mov.l @(8,r15),r2; \ + mov.l @(12,r15),r3; \ + mov.l r8,@-r15; \ + mov.l @(20,r15),r8; \ + trapa #(n); \ + nop; \ + rts; \ + mov.l @r15+,r8 + diff --git a/src/kernel/libroot/os/arch/sparc64/syscalls.inc b/src/kernel/libroot/os/arch/sparc64/syscalls.inc new file mode 100644 index 0000000000..5738d6037e --- /dev/null +++ b/src/kernel/libroot/os/arch/sparc64/syscalls.inc @@ -0,0 +1,5 @@ +/* +** Copyright 2001, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the NewOS License. +*/ +