From e8d149b2f764dc40d5530a9deac9d39ccfcb1d30 Mon Sep 17 00:00:00 2001 From: dfr Date: Sun, 26 May 2002 16:03:13 +0000 Subject: Add declarations of suword32 and suword64. Add implementations of one or the other (or both) to all the platforms. Similar for fuword32 and fuword64. --- sys/alpha/alpha/support.s | 2 ++ sys/amd64/amd64/support.S | 6 ++++++ sys/amd64/amd64/support.s | 6 ++++++ sys/i386/i386/support.s | 6 ++++++ sys/powerpc/aim/copyinout.c | 13 +++++++++++++ sys/powerpc/powerpc/copyinout.c | 13 +++++++++++++ sys/sparc64/sparc64/support.S | 24 ++++++++++++++++++++++++ sys/sparc64/sparc64/support.s | 24 ++++++++++++++++++++++++ sys/sys/systm.h | 4 ++++ 9 files changed, 98 insertions(+) (limited to 'sys') diff --git a/sys/alpha/alpha/support.s b/sys/alpha/alpha/support.s index 497412d..47058e6 100644 --- a/sys/alpha/alpha/support.s +++ b/sys/alpha/alpha/support.s @@ -65,6 +65,7 @@ */ LEAF(suword, 1) + XLEAF(suword64, 1) LDGP(pv) ldiq t0, VM_MAXUSER_ADDRESS /* verify address validity */ @@ -110,6 +111,7 @@ END(subyte) LEAF(fuword, 1) + XLEAF(fuword64, 1) LDGP(pv) ldiq t0, VM_MAXUSER_ADDRESS /* verify address validity */ diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S index bc58672..ed699cf 100644 --- a/sys/amd64/amd64/support.S +++ b/sys/amd64/amd64/support.S @@ -1189,6 +1189,9 @@ ENTRY(fuword) movl $0,PCB_ONFAULT(%ecx) ret +ENTRY(fuword32) + jmp fuword + /* * These two routines are called from the profiling code, potentially * at interrupt time. If they fail, that's okay, good things will @@ -1286,6 +1289,9 @@ ENTRY(suword) movl %eax,PCB_ONFAULT(%ecx) ret +ENTRY(suword32) + jmp suword + /* * susword - MP SAFE (if not I386_CPU) */ diff --git a/sys/amd64/amd64/support.s b/sys/amd64/amd64/support.s index bc58672..ed699cf 100644 --- a/sys/amd64/amd64/support.s +++ b/sys/amd64/amd64/support.s @@ -1189,6 +1189,9 @@ ENTRY(fuword) movl $0,PCB_ONFAULT(%ecx) ret +ENTRY(fuword32) + jmp fuword + /* * These two routines are called from the profiling code, potentially * at interrupt time. If they fail, that's okay, good things will @@ -1286,6 +1289,9 @@ ENTRY(suword) movl %eax,PCB_ONFAULT(%ecx) ret +ENTRY(suword32) + jmp suword + /* * susword - MP SAFE (if not I386_CPU) */ diff --git a/sys/i386/i386/support.s b/sys/i386/i386/support.s index bc58672..ed699cf 100644 --- a/sys/i386/i386/support.s +++ b/sys/i386/i386/support.s @@ -1189,6 +1189,9 @@ ENTRY(fuword) movl $0,PCB_ONFAULT(%ecx) ret +ENTRY(fuword32) + jmp fuword + /* * These two routines are called from the profiling code, potentially * at interrupt time. If they fail, that's okay, good things will @@ -1286,6 +1289,9 @@ ENTRY(suword) movl %eax,PCB_ONFAULT(%ecx) ret +ENTRY(suword32) + jmp suword + /* * susword - MP SAFE (if not I386_CPU) */ diff --git a/sys/powerpc/aim/copyinout.c b/sys/powerpc/aim/copyinout.c index cab274c..70789ac 100644 --- a/sys/powerpc/aim/copyinout.c +++ b/sys/powerpc/aim/copyinout.c @@ -265,6 +265,13 @@ suword(void *addr, long word) } int +suword32(void *addr, u_int32_t word) +{ + return (suword(addr, word)); +} + + +int fubyte(const void *addr) { struct thread *td; @@ -314,3 +321,9 @@ fuword(const void *addr) td->td_pcb->pcb_onfault = NULL; return (val); } + +u_int32_t +fuword32(const void *addr) +{ + return (fuword(addr)); +} diff --git a/sys/powerpc/powerpc/copyinout.c b/sys/powerpc/powerpc/copyinout.c index cab274c..70789ac 100644 --- a/sys/powerpc/powerpc/copyinout.c +++ b/sys/powerpc/powerpc/copyinout.c @@ -265,6 +265,13 @@ suword(void *addr, long word) } int +suword32(void *addr, u_int32_t word) +{ + return (suword(addr, word)); +} + + +int fubyte(const void *addr) { struct thread *td; @@ -314,3 +321,9 @@ fuword(const void *addr) td->td_pcb->pcb_onfault = NULL; return (val); } + +u_int32_t +fuword32(const void *addr) +{ + return (fuword(addr)); +} diff --git a/sys/sparc64/sparc64/support.S b/sys/sparc64/sparc64/support.S index a878cb6..1e0ab69 100644 --- a/sys/sparc64/sparc64/support.S +++ b/sys/sparc64/sparc64/support.S @@ -512,6 +512,18 @@ ENTRY(fuword) END(fuword) /* + * u_int64_t fuword64(const void *base) + */ +ENTRY(fuword64) +#if KTR_COMPILE & KTR_CT1 + CATR(KTR_CT1, "fuword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9) + stx %o0, [%g1 + KTR_PARM1] +9: +#endif + FU_BYTES(ldxa, 8, .Lfsfault) +END(fuword64) + +/* * int subyte(const void *base, int byte) */ ENTRY(subyte) @@ -571,6 +583,18 @@ ENTRY(suword) SU_BYTES(stxa, 8, .Lfsfault) END(suword) +/* + * int suword64(const void *base, u_int64_t word) + */ +ENTRY(suword64) +#if KTR_COMPILE & KTR_CT1 + CATR(KTR_CT1, "suword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9) + stx %o0, [%g1 + KTR_PARM1] +9: +#endif + SU_BYTES(stxa, 8, .Lfsfault) +END(suword64) + .align 16 .Lfsalign: #if KTR_COMPILE & KTR_CT1 diff --git a/sys/sparc64/sparc64/support.s b/sys/sparc64/sparc64/support.s index a878cb6..1e0ab69 100644 --- a/sys/sparc64/sparc64/support.s +++ b/sys/sparc64/sparc64/support.s @@ -512,6 +512,18 @@ ENTRY(fuword) END(fuword) /* + * u_int64_t fuword64(const void *base) + */ +ENTRY(fuword64) +#if KTR_COMPILE & KTR_CT1 + CATR(KTR_CT1, "fuword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9) + stx %o0, [%g1 + KTR_PARM1] +9: +#endif + FU_BYTES(ldxa, 8, .Lfsfault) +END(fuword64) + +/* * int subyte(const void *base, int byte) */ ENTRY(subyte) @@ -571,6 +583,18 @@ ENTRY(suword) SU_BYTES(stxa, 8, .Lfsfault) END(suword) +/* + * int suword64(const void *base, u_int64_t word) + */ +ENTRY(suword64) +#if KTR_COMPILE & KTR_CT1 + CATR(KTR_CT1, "suword64: base=%#lx", %g1, %g2, %g3, 7, 8, 9) + stx %o0, [%g1 + KTR_PARM1] +9: +#endif + SU_BYTES(stxa, 8, .Lfsfault) +END(suword64) + .align 16 .Lfsalign: #if KTR_COMPILE & KTR_CT1 diff --git a/sys/sys/systm.h b/sys/sys/systm.h index 7f4e3af..1c3c31d5 100644 --- a/sys/sys/systm.h +++ b/sys/sys/systm.h @@ -180,8 +180,12 @@ int copyout(const void *kaddr, void *udaddr, size_t len); int fubyte(const void *base); int subyte(void *base, int byte); int suibyte(void *base, int byte); +int32_t fuword32(const void *base); +int64_t fuword64(const void *base); long fuword(const void *base); int suword(void *base, long word); +int suword32(void *base, int32_t word); +int suword64(void *base, int64_t word); int fusword(void *base); int susword(void *base, int word); -- cgit v1.1