Commit | Line | Data |
---|---|---|
8a547ac9 GM |
1 | /* |
2 | * @(#)vaxbsubs.s 3.1 10/29/86 | |
3 | */ | |
4 | ||
5 | /* | |
6 | * Copyright (c) 1984, 1985, 1986 by the Regents of the | |
7 | * University of California and by Gregory Glenn Minshall. | |
8 | * | |
9 | * Permission to use, copy, modify, and distribute these | |
10 | * programs and their documentation for any purpose and | |
11 | * without fee is hereby granted, provided that this | |
12 | * copyright and permission appear on all copies and | |
13 | * supporting documentation, the name of the Regents of | |
14 | * the University of California not be used in advertising | |
15 | * or publicity pertaining to distribution of the programs | |
16 | * without specific prior permission, and notice be given in | |
17 | * supporting documentation that copying and distribution is | |
18 | * by permission of the Regents of the University of California | |
19 | * and by Gregory Glenn Minshall. Neither the Regents of the | |
20 | * University of California nor Gregory Glenn Minshall make | |
21 | * representations about the suitability of this software | |
22 | * for any purpose. It is provided "as is" without | |
23 | * express or implied warranty. | |
24 | */ | |
25 | ||
26 | /* This is taken from bcmp.s from 4.2. | |
27 | * The output of bunequal is the offset of the byte which didn't match; | |
28 | * if all the bytes match, then we return n. | |
29 | * | |
30 | * BUGNOTE: This has no chance of working for lengths greater than 64K. | |
31 | * (so, if you use this somewhere else, you may need to | |
32 | * fix it...) | |
33 | */ | |
34 | ||
35 | /* bunequal(s1, s2, n) */ | |
36 | ||
37 | #include "defs.h" | |
38 | ||
39 | ENTRY(bunequal) | |
40 | movl 4(ap),r1 | |
41 | movl 8(ap),r3 | |
42 | movl 12(ap),r4 | |
43 | 1: | |
44 | movzwl $65535,r0 | |
45 | cmpl r4,r0 | |
46 | jleq 2f | |
47 | subl2 r0,r4 | |
48 | cmpc3 r0,(r1),(r3) | |
49 | jeql 1b | |
50 | addl2 r4,r0 | |
51 | /* changes... */ | |
52 | subl3 r0,12(ap),r0 | |
53 | /* end of changes for bunequal... */ | |
54 | ret | |
55 | 2: | |
56 | cmpc3 r4,(r1),(r3) | |
57 | /* changes... */ | |
58 | subl3 r0,12(ap),r0 | |
59 | /* end of changes for bunequal... */ | |
60 | ret | |
61 | ||
62 | ||
63 | ||
64 | ||
65 | /* brand new code, using the above as base... */ | |
66 | /* bskip(s1, n, b) : finds the first occurrence of any byte != 'b' in the 'n' | |
67 | * bytes beginning at 's1'. | |
68 | * | |
69 | * BUGNOTE: This has no chance of working for lengths greater than 64K. | |
70 | * (so, if you use this somewhere else, you may need to | |
71 | * fix it...) | |
72 | */ | |
73 | ||
74 | ENTRY(bskip) | |
75 | movl 4(ap),r1 | |
76 | movl 8(ap),r3 | |
77 | movl 12(ap),r4 | |
78 | 1: | |
79 | movzwl $65535,r0 | |
80 | cmpl r3,r0 | |
81 | jleq 2f | |
82 | subl2 r0,r3 | |
83 | skpc r4,r0,(r1) | |
84 | jeql 1b | |
85 | addl2 r3,r0 | |
86 | subl3 r0,8(ap),r0 | |
87 | ret | |
88 | 2: | |
89 | skpc r4,r3,(r1) | |
90 | subl3 r0,8(ap),r0 | |
91 | ret |