From 6e8dc5bc374ed6ea4096b1504e5d50aa4cbdc43a Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 9 Apr 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-04-09 --- pc/devvga.c | 2 ++ pc/l.s | 51 +++++++++++++++++++++++++++++++++++++++++++++++--- port/devproc.c | 2 +- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/pc/devvga.c b/pc/devvga.c index ac0c2b266ee8342c2f743d3159799a17bc54ce46..4243ad5f2eb9f88f2a6069990e5f88a68bc9c0c3 100644 --- a/pc/devvga.c +++ b/pc/devvga.c @@ -627,6 +627,8 @@ screenupdate(void) break; case 3: f = memmove; + r.min.x &= ~3; + r.max.x = ROUND(r.max.x, 4); len = r.max.x - r.min.x; break; default: diff --git a/pc/l.s b/pc/l.s index 5d234639623136e63a26aa6f017c6372bca550e2..4d59232201ec9257eb47301e78cbf7cfa8f0fa3d 100644 --- a/pc/l.s +++ b/pc/l.s @@ -567,22 +567,29 @@ TEXT idle(SB),$0 RET /* - * return cpu type (what is a pentium?) + * return cpu type (586 == pentium or better) */ TEXT x86(SB),$0 PUSHFL MOVL 0(SP),AX - ORL $0x40000,AX + ORL $0x240000,AX PUSHL AX POPFL PUSHFL - POPL AX + MOVL 0(SP),AX ANDL $0x40000,AX JZ is386 + POPL AX + ANDL $0x200000,AX + JZ is486 + MOVL $586,AX + JMP done +is486 MOVL $486,AX JMP done is386: + POPL AX MOVL $386,AX done: POPFL @@ -818,3 +825,41 @@ dsploop: dspout: RET + + + TEXT damove(SB), $0 + + MOVL p1+0(FP), DI + MOVL p2+4(FP), SI + MOVL n+8(FP), BX + CLD +/* + * less than a word, just copy bytes + */ + CMPL BX, $4 + JLS bybyte +/* + * copy bytes till dest is word alligned + */ + MOVL DI, DX + ANDL $3, DX + JEQ byword + MOVL $4, CX + SUBL DX, CX + SUBL CX, BX + REP; MOVSB +/* + * copy whole longs + */ +byword: + MOVL BX, CX + SHRL $2, CX + REP; MOVSL +/* + * copy the rest, by bytes + */ + ANDL $3, BX +bybyte: + MOVL BX, CX + REP; MOVSB + RET diff --git a/port/devproc.c b/port/devproc.c index eb244a50ad0baf23b1f7384be91a858596671c73..b4dd53f20ace441a6837c825ba9f2ca4b1fbf529 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -775,7 +775,7 @@ procctlmemio(Proc *p, ulong offset, int n, void *va, int read) if(offset+n >= s->top) n = s->top-offset; - if((s->type&SG_TYPE) == SG_TEXT) + if(!read && (s->type&SG_TYPE) == SG_TEXT) s = txt2data(p, s); s->steal++;