|
|
1.1 root 1: #
2: # miscellaneous assembly stuff
3: #
4:
5: .globl _u
6: .set _u,KA - UPAGES*NBPG
7:
8: .text
9:
10: _addupc: .globl _addupc
11: .word 0x0
12: movl 8(ap),r2 # &u.u_prof
13: subl3 8(r2),4(ap),r0 # corrected pc
14: blss 9f
15: extzv $1,$31,r0,r0 # logical right shift
16: extzv $1,$31,12(r2),r1 # ditto for scale
17: emul r1,r0,$0,r0
18: ashq $-14,r0,r0
19: tstl r1
20: bneq 9f
21: incl r0
22: bicl2 $1,r0
23: cmpl r0,4(r2) # length
24: bgequ 9f
25: addl2 (r2),r0 # base
26: probew $3,$2,(r0)
27: beql 8f
28: addw2 12(ap),(r0)
29: 9:
30: ret
31: 8:
32: clrl 12(r2)
33: ret
34:
35: #
36: # 2-byte access to memory;
37: # useful for UNIBUS address space
38: # someone has already probed access
39: #
40: # UNIcpy(uniaddr, useraddr, count, direct)
41: # direct is nonzero (B_READ) if data is going to useraddr
42: #
43: # returns nonzero if access failed, like copyin
44: #
45:
46: .globl _UNIcpy
47: _UNIcpy:
48: .word 0
49: movl 4(ap),r0 # from
50: movl 8(ap),r1 # to
51: tstl 16(ap)
52: jneq 1f
53: movl 8(ap),r0 # from
54: movl 4(ap),r1 # to
55: 1:
56: divl3 $2,12(ap),r2 # byte count
57: jeql 3f
58: pushl _nofault
59: movab 9f,_nofault
60: 2:
61: movw (r0)+,(r1)+
62: sobgtr r2,2b
63: 3:
64: movl (sp)+,_nofault
65: clrl r0 # ok
66: ret
67:
68: 9:
69: movl (sp)+,_nofault
70: mnegl $1,r0 # error
71: ret
72:
73: #
74: # `safe' (nofault-protected) mfpr/mtpr
75: # umptr returns 1 if ok, 0 if not
76: # umfpr returns 0 on error, which is ambiguous. too bad.
77: # they should really set u.u_error.
78: #
79:
80: .globl _umfpr
81: _umfpr: .word 0
82: pushl _nofault
83: movab 9f,_nofault
84: mfpr 4(ap),r0
85: movl (sp)+,_nofault
86: ret
87:
88: .globl _umtpr
89: _umtpr: .word 0
90: pushl _nofault
91: movab 9f,_nofault
92: mtpr 8(ap),4(ap)
93: movl (sp)+,_nofault
94: movl $1,r0
95: ret
96:
97: 9:
98: movl (sp)+,_nofault
99: clrl r0
100: ret
101:
102: #
103: # here on stray interrupt
104: #
105:
106: .globl Xstray
107: Xstray:
108: pushr $SAVREG
109: subl3 $straycatch+3,NRS*4(sp),-(sp)
110: calls $1,_strayintr
111: popr $SAVREG
112: tstl (sp)+
113: rei
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.