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