Initial revision
This commit is contained in:
parent
0e7eb937b4
commit
6bdc39213b
28 changed files with 579 additions and 0 deletions
26
mach/ns/libem/LIST
Normal file
26
mach/ns/libem/LIST
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
tail_em.a
|
||||||
|
dup.s
|
||||||
|
aar.s
|
||||||
|
lar.s
|
||||||
|
sar.s
|
||||||
|
los.s
|
||||||
|
rck.s
|
||||||
|
csb.s
|
||||||
|
csa.s
|
||||||
|
exg.s
|
||||||
|
sts.s
|
||||||
|
gto.s
|
||||||
|
cii.s
|
||||||
|
cms.s
|
||||||
|
mon.s
|
||||||
|
cmu.s
|
||||||
|
dvu.s
|
||||||
|
rmu.s
|
||||||
|
cff.s
|
||||||
|
cfi.s
|
||||||
|
cif.s
|
||||||
|
trp.s
|
||||||
|
print.s
|
||||||
|
prstr.s
|
||||||
|
prnl.s
|
||||||
|
putchar.s
|
18
mach/ns/libem/Makefile
Normal file
18
mach/ns/libem/Makefile
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# $Header$
|
||||||
|
install:
|
||||||
|
arch t tail_em.a > LIST
|
||||||
|
../../install tail_em.a tail_em
|
||||||
|
../../install end.s tail_em.vend
|
||||||
|
|
||||||
|
cmp:
|
||||||
|
-../../compare tail_em.a tail_em
|
||||||
|
-../../compare end.s end_em
|
||||||
|
|
||||||
|
clean :
|
||||||
|
|
||||||
|
opr :
|
||||||
|
make pr | opr
|
||||||
|
|
||||||
|
pr:
|
||||||
|
@arch pv tail_em.a | pr -h `pwd`/tail_em.a
|
||||||
|
@pr `pwd`/end.s
|
10
mach/ns/libem/aar.s
Normal file
10
mach/ns/libem/aar.s
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.define .aar
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.aar:
|
||||||
|
movd 8(sp), r7
|
||||||
|
subd 0(4(sp)), r7
|
||||||
|
muld 8(4(sp)), r7
|
||||||
|
addd r7, 12(sp)
|
||||||
|
ret 8
|
18
mach/ns/libem/cff.s
Normal file
18
mach/ns/libem/cff.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.define .cff
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.cff : cmpd 4(sp), 8(sp)
|
||||||
|
beq 1f
|
||||||
|
cmpd 4, 4(sp)
|
||||||
|
beq 4f
|
||||||
|
cmpd 8, 4(sp)
|
||||||
|
beq 8f
|
||||||
|
1:
|
||||||
|
ret 8
|
||||||
|
4:
|
||||||
|
movlf 12(sp),16(sp)
|
||||||
|
ret 12
|
||||||
|
8:
|
||||||
|
movfl 12(sp), 8(sp)
|
||||||
|
ret 4
|
15
mach/ns/libem/cfi.s
Normal file
15
mach/ns/libem/cfi.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .cfi
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.cfi: cmpd 4, 8(sp)
|
||||||
|
beq 4f
|
||||||
|
cmpd 8, 8(sp)
|
||||||
|
beq 8f
|
||||||
|
ret 8
|
||||||
|
4:
|
||||||
|
roundfd 12(sp),12(sp)
|
||||||
|
ret 8
|
||||||
|
8:
|
||||||
|
roundld 12(sp), 16(sp)
|
||||||
|
ret 12
|
15
mach/ns/libem/cif.s
Normal file
15
mach/ns/libem/cif.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .cif
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.cif : cmpd 4, 4(sp)
|
||||||
|
beq 4f
|
||||||
|
cmpd 8, 4(sp)
|
||||||
|
beq 8f
|
||||||
|
ret 8
|
||||||
|
4:
|
||||||
|
movdf 12(sp),12(sp)
|
||||||
|
ret 8
|
||||||
|
8:
|
||||||
|
movdl 12(sp), 8(sp)
|
||||||
|
ret 4
|
28
mach/ns/libem/cii.s
Normal file
28
mach/ns/libem/cii.s
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
.define .cii
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
!r7 will save return addres
|
||||||
|
.cii:
|
||||||
|
movd tos, r7
|
||||||
|
cmpqd 4, tos
|
||||||
|
bne 3f
|
||||||
|
movd tos, r0
|
||||||
|
cmpqd 1, r0
|
||||||
|
beq 1f
|
||||||
|
cmpqd 2, r0
|
||||||
|
beq 2f
|
||||||
|
cmpqd 4, r0
|
||||||
|
beq 4f
|
||||||
|
3:
|
||||||
|
movd EILLINS, tos
|
||||||
|
jsr @.trp
|
||||||
|
4:
|
||||||
|
movd r7, tos
|
||||||
|
ret 0
|
||||||
|
1:
|
||||||
|
movxbd 0(sp), 0(sp)
|
||||||
|
br 4b
|
||||||
|
2:
|
||||||
|
movxwd 0(sp), 0(sp)
|
||||||
|
br 4b
|
25
mach/ns/libem/cms.s
Normal file
25
mach/ns/libem/cms.s
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
.define .cms
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.cms: movd tos, r7 !return addres
|
||||||
|
addr 4(sp), r1
|
||||||
|
movd r1, r2
|
||||||
|
addd 0(sp), r2
|
||||||
|
movd 0(sp), r0
|
||||||
|
muld -2, r0
|
||||||
|
subd 4, r0
|
||||||
|
3:
|
||||||
|
cmpd 0(r2), 0(r1)
|
||||||
|
bne 2f
|
||||||
|
addr 4(r1), r1
|
||||||
|
addr 4(r2), r2
|
||||||
|
acbd -4, 0(sp), 3b
|
||||||
|
xord r1, r1
|
||||||
|
4:
|
||||||
|
adjspd r0
|
||||||
|
movd r7, tos
|
||||||
|
ret 0
|
||||||
|
2:
|
||||||
|
movd 1, r1
|
||||||
|
br 4b
|
29
mach/ns/libem/cmu.s
Normal file
29
mach/ns/libem/cmu.s
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
.define .cmu
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.cmu: movd tos, r7 !return addres
|
||||||
|
addr 4(sp), r1
|
||||||
|
movd r1, r2
|
||||||
|
addd 0(sp), r2
|
||||||
|
movd 0(sp), r0
|
||||||
|
muld -2, r0
|
||||||
|
subd 4, r0
|
||||||
|
3:
|
||||||
|
cmpd 0(r2), 0(r1)
|
||||||
|
bhi 1f
|
||||||
|
blo 2f
|
||||||
|
addr 4(r1), r1
|
||||||
|
addr 4(r2), r2
|
||||||
|
acbd -4, 0(sp), 3b
|
||||||
|
xord r1, r1
|
||||||
|
4:
|
||||||
|
adjspd r0
|
||||||
|
movd r7, tos
|
||||||
|
ret 0
|
||||||
|
1:
|
||||||
|
movd 1, r1
|
||||||
|
br 4b
|
||||||
|
2:
|
||||||
|
movd -1, r1
|
||||||
|
br 4b
|
29
mach/ns/libem/csa.s
Normal file
29
mach/ns/libem/csa.s
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
.define .csa
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
!r0 contains index
|
||||||
|
!r1 contains pointer to csa descriptor
|
||||||
|
.csa: movd 4(r1), r2 !get lower bound
|
||||||
|
cmpd r2, r0
|
||||||
|
bgt 1f !index out of range
|
||||||
|
addd 8(r1), r2 !get upper bound
|
||||||
|
cmpd r2, r0
|
||||||
|
blt 1f !index out of range
|
||||||
|
addr 12(r1), r2 !pointer to first pointer
|
||||||
|
subd 4(r1), r0
|
||||||
|
muld 4, r0
|
||||||
|
addd r0,r2 !right pointer
|
||||||
|
cmpqd 0, 0(r2)
|
||||||
|
beq 1f !null pointer
|
||||||
|
movd 0(r2), tos !jump now
|
||||||
|
ret 4
|
||||||
|
1: !jump to default pointer
|
||||||
|
cmpqd 0, 0(r1)
|
||||||
|
beq 2f !null pointer
|
||||||
|
movd 0(r1), tos
|
||||||
|
ret 4
|
||||||
|
2:
|
||||||
|
movd ECASE, tos
|
||||||
|
jsr @.trp
|
||||||
|
ret 0
|
29
mach/ns/libem/csb.s
Normal file
29
mach/ns/libem/csb.s
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
.define .csb
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
!r0 contains index
|
||||||
|
!r1 contains pointer to csb descriptor
|
||||||
|
.csb:
|
||||||
|
save[r2,r3]
|
||||||
|
movd 4(r1), r2 !number of entries
|
||||||
|
movd r1, r3
|
||||||
|
1:
|
||||||
|
addd 8, r3 !find addres of next index
|
||||||
|
cmpd 0(r3), r0 !compare indices
|
||||||
|
beq 2f
|
||||||
|
acbd -1, r2, 1b
|
||||||
|
3: !r1 now contains right pointer
|
||||||
|
cmpqd 0, 0(r1) !test destination addres
|
||||||
|
beq 4f
|
||||||
|
restore[r2,r3]
|
||||||
|
movd 0(r1), tos !jump to destination
|
||||||
|
ret 4
|
||||||
|
2:
|
||||||
|
addr 4(r3), r1 !put destination pointer in r1
|
||||||
|
br 3b
|
||||||
|
4:
|
||||||
|
movd ECASE, tos
|
||||||
|
jsr @.trp
|
||||||
|
restore[r2,r3]
|
||||||
|
ret 0
|
12
mach/ns/libem/dup.s
Normal file
12
mach/ns/libem/dup.s
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.define .dup
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
!r2 will save return addres
|
||||||
|
.dup:
|
||||||
|
movd tos, r2
|
||||||
|
addr 0(sp), tos
|
||||||
|
movd r0, tos
|
||||||
|
jsr @.los
|
||||||
|
movd r2, tos
|
||||||
|
ret 0
|
21
mach/ns/libem/dvu.s
Normal file
21
mach/ns/libem/dvu.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
.define .dvu
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.dvu:
|
||||||
|
enter[r1,r2],0
|
||||||
|
movd 1,r2
|
||||||
|
andd 12(fp), r2
|
||||||
|
movd 12(fp), r0
|
||||||
|
lshd -1,r0
|
||||||
|
quod 8(fp), r0
|
||||||
|
lshd 1,r0
|
||||||
|
movd 12(fp), r1
|
||||||
|
lshd -1,r1
|
||||||
|
remd 8(fp), r1
|
||||||
|
lshd 1,r1
|
||||||
|
addd r2, r1
|
||||||
|
quod 8(fp),r1
|
||||||
|
addd r1, r0
|
||||||
|
exit[r1,r2]
|
||||||
|
ret 8
|
15
mach/ns/libem/end.s
Normal file
15
mach/ns/libem/end.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define endtext,enddata,endbss
|
||||||
|
.define _end, _etext, _edata
|
||||||
|
|
||||||
|
.text
|
||||||
|
endtext:
|
||||||
|
_etext:
|
||||||
|
.align 4
|
||||||
|
.data
|
||||||
|
enddata:
|
||||||
|
_edata:
|
||||||
|
.align 4
|
||||||
|
.bss
|
||||||
|
.align 4
|
||||||
|
endbss:
|
||||||
|
_end:
|
18
mach/ns/libem/exg.s
Normal file
18
mach/ns/libem/exg.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.define .exg
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.exg:
|
||||||
|
save [r2,r3]
|
||||||
|
addr 8(sp), r3
|
||||||
|
movd r3, r2
|
||||||
|
addd r0, r3
|
||||||
|
1:
|
||||||
|
movd 0(r2), r1
|
||||||
|
movd 0(r3), 0(r2)
|
||||||
|
movd r1, 0(r3)
|
||||||
|
addr 4(r2), r2
|
||||||
|
addr 4(r3), r3
|
||||||
|
acbd -4, r0, 1b
|
||||||
|
restore[r2,r3]
|
||||||
|
ret 0
|
17
mach/ns/libem/gto.s
Normal file
17
mach/ns/libem/gto.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.define .gto
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
!r0 contains descriptor addres
|
||||||
|
.gto:
|
||||||
|
addr 0(sp), r7 !first put future localbase in sp
|
||||||
|
subd 8(r0), r7
|
||||||
|
subd 4, r7
|
||||||
|
adjspd r7 !done
|
||||||
|
movd -4(sp), r1 !save this memory location
|
||||||
|
enter[], 0 !adjust local base
|
||||||
|
movd r1, 0(sp) !restore saved memory location
|
||||||
|
addr 0(sp), r7 !adjust stackpointer now
|
||||||
|
subd 4(r0), r7
|
||||||
|
adjspd r7
|
||||||
|
jump r0 !adjust programcounter
|
15
mach/ns/libem/lar.s
Normal file
15
mach/ns/libem/lar.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .lar
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.lar:
|
||||||
|
movd tos, r2
|
||||||
|
movd 4(sp), r0
|
||||||
|
subd 0(0(sp)), r0
|
||||||
|
muld 8(0(sp)), r0
|
||||||
|
addd r0, 8(sp)
|
||||||
|
movd 8(0(sp)), 4(sp)
|
||||||
|
adjspd -4
|
||||||
|
jsr @.los
|
||||||
|
movd r2, tos
|
||||||
|
ret 0
|
26
mach/ns/libem/los.s
Normal file
26
mach/ns/libem/los.s
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
.define .los
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.los:
|
||||||
|
movd tos, r7
|
||||||
|
movd tos, r0
|
||||||
|
movd tos, r1
|
||||||
|
cmpqd 1, r0
|
||||||
|
beq 1f
|
||||||
|
cmpqd 2, r0
|
||||||
|
beq 2f
|
||||||
|
addd r0, r1
|
||||||
|
3:
|
||||||
|
addqd -4, r1
|
||||||
|
movd 0(r1), tos
|
||||||
|
acbd -4, r0, 3b
|
||||||
|
4:
|
||||||
|
movd r7, tos
|
||||||
|
ret 0
|
||||||
|
1:
|
||||||
|
movzbd 0(r1), tos
|
||||||
|
br 4b
|
||||||
|
2:
|
||||||
|
movzwd 0(r1), tos
|
||||||
|
br 4b
|
53
mach/ns/libem/mon.s
Normal file
53
mach/ns/libem/mon.s
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
.define .mon
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.mon:
|
||||||
|
cmpd 1,4(sp)
|
||||||
|
beq 1f
|
||||||
|
cmpd 3,4(sp)
|
||||||
|
beq 3f
|
||||||
|
cmpd 4,4(sp)
|
||||||
|
beq 4f
|
||||||
|
cmpd 54,4(sp)
|
||||||
|
beq 5f
|
||||||
|
|
||||||
|
movd .add1, tos
|
||||||
|
jsr @.prstr
|
||||||
|
movd 4(sp), tos
|
||||||
|
jsr @.print
|
||||||
|
movd .add2, tos
|
||||||
|
jsr @.prstr
|
||||||
|
ret 4
|
||||||
|
|
||||||
|
1: jump @.stop
|
||||||
|
|
||||||
|
3: save [r0,r1,r2,r3]
|
||||||
|
movd 3,r0
|
||||||
|
movd 28(sp),r1
|
||||||
|
movd 32(sp),r2
|
||||||
|
movd 0,r3
|
||||||
|
svc
|
||||||
|
movd r2, 32(sp)
|
||||||
|
movd 0,28(sp)
|
||||||
|
restore [r0,r1,r2,r3]
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
4: save [r0,r1,r2,r3]
|
||||||
|
movd 4,r0
|
||||||
|
movd 28(sp),r1
|
||||||
|
movd 32(sp),r2
|
||||||
|
movd 0,r3
|
||||||
|
svc
|
||||||
|
movd r2, 32(sp)
|
||||||
|
movd 0,28(sp)
|
||||||
|
restore [r0,r1,r2,r3]
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
5: movd 0, 16(sp)
|
||||||
|
ret 12
|
||||||
|
|
||||||
|
.data
|
||||||
|
.add1: .asciz "monitor call "
|
||||||
|
.add2: .asciz " not implemented\n"
|
||||||
|
.align
|
26
mach/ns/libem/print.s
Normal file
26
mach/ns/libem/print.s
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
.define .print
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.print:
|
||||||
|
save[r0,r1,r2]
|
||||||
|
movd 16(sp), r0
|
||||||
|
movd 1000000000, r2
|
||||||
|
cmpqd 0, r0
|
||||||
|
ble 4f
|
||||||
|
movb "-", tos
|
||||||
|
jsr @.putchar
|
||||||
|
negd r0, r0
|
||||||
|
4:
|
||||||
|
! deid r2, r0
|
||||||
|
movd r0, r1
|
||||||
|
divd r2, r1
|
||||||
|
modd r2, r0
|
||||||
|
addb "0", r1
|
||||||
|
movb r1, tos
|
||||||
|
jsr @.putchar
|
||||||
|
divd 10, r2
|
||||||
|
cmpqd 0, r2
|
||||||
|
bne 4b
|
||||||
|
restore[r0,r1,r2]
|
||||||
|
ret 4
|
7
mach/ns/libem/prnl.s
Normal file
7
mach/ns/libem/prnl.s
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
.define .prnl
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.prnl: movb "\n", tos
|
||||||
|
jsr @.putchar
|
||||||
|
ret 0
|
18
mach/ns/libem/prstr.s
Normal file
18
mach/ns/libem/prstr.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
.define .prstr
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
!het adres van de af te drukken string staat op de stack.
|
||||||
|
.prstr:
|
||||||
|
save [r1]
|
||||||
|
movd 8(sp), r1
|
||||||
|
1:
|
||||||
|
cmpqb 0, 0(r1)
|
||||||
|
beq 2f
|
||||||
|
movb 0(r1), tos
|
||||||
|
jsr @.putchar
|
||||||
|
addqd 1, r1
|
||||||
|
br 1b
|
||||||
|
2:
|
||||||
|
restore [r1]
|
||||||
|
ret 4
|
13
mach/ns/libem/putchar.s
Normal file
13
mach/ns/libem/putchar.s
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
.define .putchar
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.putchar:
|
||||||
|
save [r0, r1, r2, r3]
|
||||||
|
movqd 4, r0
|
||||||
|
addr 20(sp), r1
|
||||||
|
movqd 1, r2
|
||||||
|
xord r3, r3
|
||||||
|
svc
|
||||||
|
restore[r0,r1,r2,r3]
|
||||||
|
ret 1
|
14
mach/ns/libem/rck.s
Normal file
14
mach/ns/libem/rck.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.define .rck
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.rck:
|
||||||
|
cmpd 0(4(sp)), 8(sp)
|
||||||
|
bgt 1f
|
||||||
|
cmpd 4(4(sp)), 8(sp)
|
||||||
|
bge 2f
|
||||||
|
1:
|
||||||
|
movd ERANGE, tos
|
||||||
|
jsr @.trp
|
||||||
|
2:
|
||||||
|
ret 4
|
16
mach/ns/libem/rmu.s
Normal file
16
mach/ns/libem/rmu.s
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
.define .rmu
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.rmu:
|
||||||
|
enter[r2],0
|
||||||
|
movd 1,r2
|
||||||
|
andd 12(fp),r2
|
||||||
|
movd 12(fp),r0
|
||||||
|
lshd -1,r0
|
||||||
|
remd 8(fp),r0
|
||||||
|
lshd 1,r0
|
||||||
|
addd r2,r0
|
||||||
|
remd 8(fp), r0
|
||||||
|
exit[r2]
|
||||||
|
ret 8
|
15
mach/ns/libem/sar.s
Normal file
15
mach/ns/libem/sar.s
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.define .sar
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.sar:
|
||||||
|
movd tos, r2
|
||||||
|
movd 4(sp), r0
|
||||||
|
subd 0(0(sp)), r0
|
||||||
|
muld 8(0(sp)), r0
|
||||||
|
addd r0, 8(sp)
|
||||||
|
movd 8(0(sp)), 4(sp)
|
||||||
|
adjspd -4
|
||||||
|
jsr @.sts
|
||||||
|
movd r2, tos
|
||||||
|
ret 0
|
27
mach/ns/libem/sts.s
Normal file
27
mach/ns/libem/sts.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .sts
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.sts:
|
||||||
|
movd tos, r7
|
||||||
|
movd tos, r0
|
||||||
|
movd tos, r1
|
||||||
|
cmpqd 1, r0
|
||||||
|
beq 1f
|
||||||
|
cmpqd 2, r0
|
||||||
|
beq 2f
|
||||||
|
3:
|
||||||
|
movd tos, 0(r1)
|
||||||
|
addqd 4, r1
|
||||||
|
acbd -4, r0, 3b
|
||||||
|
4:
|
||||||
|
movd r7, tos
|
||||||
|
ret 0
|
||||||
|
1:
|
||||||
|
movb tos, 0(r1)
|
||||||
|
adjspd -3
|
||||||
|
br 4b
|
||||||
|
2:
|
||||||
|
movw tos, 0(r1)
|
||||||
|
adjspd -2
|
||||||
|
br 4b
|
24
mach/ns/libem/trp.s
Normal file
24
mach/ns/libem/trp.s
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
.define .trp
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.trp:
|
||||||
|
save [r0, r1]
|
||||||
|
movd 12(sp), r0 !error number
|
||||||
|
cmpd r0, 16
|
||||||
|
bge 1f
|
||||||
|
sbitd r0, r1
|
||||||
|
andw @.ignmask, r1
|
||||||
|
beq 1f
|
||||||
|
br 3f !do not trap
|
||||||
|
1: !do trap
|
||||||
|
movd @.trpreg, r1
|
||||||
|
cmpqd 0, r1
|
||||||
|
beq 2f
|
||||||
|
movqd 0, @.trpreg
|
||||||
|
jsr r1
|
||||||
|
3:
|
||||||
|
restore [r0, r1]
|
||||||
|
ret 4
|
||||||
|
2:
|
||||||
|
jump @.stop !no trapprocedure supplied
|
Loading…
Reference in a new issue