From 320e99cb8d87bdc267a8cd6daec0f2dee873bb49 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 9 Mar 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-03-09 --- carrera/clock.c | 2 ++ carrera/fns.h | 3 ++- carrera/l.s | 57 +++++++++++++++++-------------------------------- port/portdat.h | 1 + port/qio.c | 1 - 5 files changed, 24 insertions(+), 40 deletions(-) diff --git a/carrera/clock.c b/carrera/clock.c index ede4e853d21cf9c4407f52893e01a5551d64de9a..3949a0b154954a142029f8d86679ee6a3d947db2 100644 --- a/carrera/clock.c +++ b/carrera/clock.c @@ -76,6 +76,8 @@ clock(Ureg *ur) m->load = (m->load*19+nrun)/20; } + ifjab(); + kproftimer(ur->pc); kmapinval(); diff --git a/carrera/fns.h b/carrera/fns.h index 932766a6fcaa435ee0d135a7d0f0d164e149cae3..d7ba3fe4f1e6a03ceb68fa0240ceb44bbe01e032 100644 --- a/carrera/fns.h +++ b/carrera/fns.h @@ -91,7 +91,6 @@ int tas(ulong*); void tlbinit(void); ulong tlbvirt(void); void touser(void*); -ulong uvmove(uvlong*, uvlong*); void vecinit(void); void vector0(void); void vector100(void); @@ -125,7 +124,9 @@ ushort nhgets(void*); void ifwrite(void*, Block*); void* ifinit(int); +void ifjab(void); void fiberint(int); ulong ifaddr(void*); void audiosbintr(void); void audiodmaintr(void); +ulong fwblock(void*, void*, ulong); diff --git a/carrera/l.s b/carrera/l.s index fac2577c1ade365955f292892166afaa3171511d..f10fc59d4423702b3b25657fb7dccb19662aad9a 100644 --- a/carrera/l.s +++ b/carrera/l.s @@ -791,7 +791,6 @@ ccache: RET TEXT getcallerpc(SB), $0 - MOVW 0(SP), R1 RET @@ -804,43 +803,6 @@ TEXT wrcompare(SB), $0 MOVW R1, M(COMPARE) RET -TEXT uvmove(SB), $-4 - AND $7, R1, R2 - MOVW 4(FP), R3 - BNE R2, uvgetuna - /* aligned load */ - LD (0,(1), 2) - WAIT - MOVW R2, R1 - DSLL (16,1,1) - DSLL (16,1,1) - DSRA (16,1,1) - DSRA (16,1,1) -uvput: - AND $7, R3, R4 - BNE R4, uvputuna - /* aligned store */ - STD (2, 0,(3)) - NOP - RET - - /* unaligned load */ -uvgetuna: - MOVW 0(R1),R2 - MOVW 4(R1),R1 - DSLL (16,2,2) - DSLL (16,2,2) - OR R1, R2 - JMP uvput - - /* unalligned store */ -uvputuna: - DSRA (16,2,2) - DSRA (16,2,2) - MOVW R2, 0(R3) - MOVW R1, 4(R3) - RET - TEXT uvld(SB), $-4 /* uvld(address, dst) */ MOVW 4(FP), R2 MOVV 0(R1), R5 @@ -852,3 +814,22 @@ TEXT uvst(SB), $-4 /* uvst(address, src) */ MOVV 0(R2), R5 MOVV R5, 0(R1) RET + +TEXT fwblock(SB), $-4 /* wblock(void*port, void *block, csum) */ + MOVW 4(FP), R2 + MOVW 8(FP), R3 + + MOVW $64, R4 +fwloop: + MOVV 0(R2), R5 + MOVV R5, 0(R1) + ADDU R5, R3 + SRLV $32, R5 + ADDU R5, R3 + + ADD $8, R2 + SUB $1, R4 + BNE R4, fwloop + + MOVW R3, R1 + RET diff --git a/port/portdat.h b/port/portdat.h index 2f9a896d986a49aa7b0fc9fd379f2dfdbe489378..a2ba42a4cb02768e8bd8af9e97204db7a2ab2cf1 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -129,6 +129,7 @@ struct Block uchar *base; /* start of the buffer */ uchar flag; }; +#define BLEN(s) ((s)->wp - (s)->rp) struct Chan { diff --git a/port/qio.c b/port/qio.c index be2265d14360af1152e7837507439d224db5c179..3244289500b174b6176a01563da1cc567880d55d 100644 --- a/port/qio.c +++ b/port/qio.c @@ -46,7 +46,6 @@ static Arena arena; * IO queues */ typedef struct Queue Queue; -#define BLEN(b) ((b)->wp - (b)->rp) struct Queue {