Initial revision

This commit is contained in:
em 1985-07-26 11:56:24 +00:00
parent 0e7eb937b4
commit 6bdc39213b
28 changed files with 579 additions and 0 deletions

26
mach/ns/libem/LIST Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View file

@ -0,0 +1,7 @@
.define .prnl
.text
.prnl: movb "\n", tos
jsr @.putchar
ret 0

18
mach/ns/libem/prstr.s Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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