Initial revision
authorem <none@none>
Fri, 26 Jul 1985 11:56:24 +0000 (11:56 +0000)
committerem <none@none>
Fri, 26 Jul 1985 11:56:24 +0000 (11:56 +0000)
28 files changed:
mach/ns/libem/LIST [new file with mode: 0644]
mach/ns/libem/Makefile [new file with mode: 0644]
mach/ns/libem/aar.s [new file with mode: 0644]
mach/ns/libem/cff.s [new file with mode: 0644]
mach/ns/libem/cfi.s [new file with mode: 0644]
mach/ns/libem/cif.s [new file with mode: 0644]
mach/ns/libem/cii.s [new file with mode: 0644]
mach/ns/libem/cms.s [new file with mode: 0644]
mach/ns/libem/cmu.s [new file with mode: 0644]
mach/ns/libem/csa.s [new file with mode: 0644]
mach/ns/libem/csb.s [new file with mode: 0644]
mach/ns/libem/dup.s [new file with mode: 0644]
mach/ns/libem/dvu.s [new file with mode: 0644]
mach/ns/libem/end.s [new file with mode: 0644]
mach/ns/libem/exg.s [new file with mode: 0644]
mach/ns/libem/gto.s [new file with mode: 0644]
mach/ns/libem/lar.s [new file with mode: 0644]
mach/ns/libem/los.s [new file with mode: 0644]
mach/ns/libem/mon.s [new file with mode: 0644]
mach/ns/libem/print.s [new file with mode: 0644]
mach/ns/libem/prnl.s [new file with mode: 0644]
mach/ns/libem/prstr.s [new file with mode: 0644]
mach/ns/libem/putchar.s [new file with mode: 0644]
mach/ns/libem/rck.s [new file with mode: 0644]
mach/ns/libem/rmu.s [new file with mode: 0644]
mach/ns/libem/sar.s [new file with mode: 0644]
mach/ns/libem/sts.s [new file with mode: 0644]
mach/ns/libem/trp.s [new file with mode: 0644]

diff --git a/mach/ns/libem/LIST b/mach/ns/libem/LIST
new file mode 100644 (file)
index 0000000..227c18e
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/Makefile b/mach/ns/libem/Makefile
new file mode 100644 (file)
index 0000000..0a2dc3f
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/aar.s b/mach/ns/libem/aar.s
new file mode 100644 (file)
index 0000000..984c57f
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/cff.s b/mach/ns/libem/cff.s
new file mode 100644 (file)
index 0000000..f1cae1d
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/cfi.s b/mach/ns/libem/cfi.s
new file mode 100644 (file)
index 0000000..c054562
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/cif.s b/mach/ns/libem/cif.s
new file mode 100644 (file)
index 0000000..8209818
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/cii.s b/mach/ns/libem/cii.s
new file mode 100644 (file)
index 0000000..d25b5fa
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/cms.s b/mach/ns/libem/cms.s
new file mode 100644 (file)
index 0000000..e8b0d50
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/cmu.s b/mach/ns/libem/cmu.s
new file mode 100644 (file)
index 0000000..66d381c
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/csa.s b/mach/ns/libem/csa.s
new file mode 100644 (file)
index 0000000..5f16e4b
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/csb.s b/mach/ns/libem/csb.s
new file mode 100644 (file)
index 0000000..15bf815
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/dup.s b/mach/ns/libem/dup.s
new file mode 100644 (file)
index 0000000..9252019
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/dvu.s b/mach/ns/libem/dvu.s
new file mode 100644 (file)
index 0000000..34b8ba4
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/end.s b/mach/ns/libem/end.s
new file mode 100644 (file)
index 0000000..9225bd8
--- /dev/null
@@ -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:
diff --git a/mach/ns/libem/exg.s b/mach/ns/libem/exg.s
new file mode 100644 (file)
index 0000000..47bc38e
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/gto.s b/mach/ns/libem/gto.s
new file mode 100644 (file)
index 0000000..8d01999
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/lar.s b/mach/ns/libem/lar.s
new file mode 100644 (file)
index 0000000..8de2d96
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/los.s b/mach/ns/libem/los.s
new file mode 100644 (file)
index 0000000..daf36cf
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/mon.s b/mach/ns/libem/mon.s
new file mode 100644 (file)
index 0000000..57ef54a
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/print.s b/mach/ns/libem/print.s
new file mode 100644 (file)
index 0000000..fa44c1f
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/prnl.s b/mach/ns/libem/prnl.s
new file mode 100644 (file)
index 0000000..6213048
--- /dev/null
@@ -0,0 +1,7 @@
+.define        .prnl
+
+       .text
+
+.prnl: movb "\n", tos
+       jsr @.putchar
+       ret 0
diff --git a/mach/ns/libem/prstr.s b/mach/ns/libem/prstr.s
new file mode 100644 (file)
index 0000000..8d7a61a
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/putchar.s b/mach/ns/libem/putchar.s
new file mode 100644 (file)
index 0000000..d5fe98f
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/rck.s b/mach/ns/libem/rck.s
new file mode 100644 (file)
index 0000000..8a22761
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/rmu.s b/mach/ns/libem/rmu.s
new file mode 100644 (file)
index 0000000..670a606
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/sar.s b/mach/ns/libem/sar.s
new file mode 100644 (file)
index 0000000..fe94845
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/sts.s b/mach/ns/libem/sts.s
new file mode 100644 (file)
index 0000000..b95f0ec
--- /dev/null
@@ -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
diff --git a/mach/ns/libem/trp.s b/mach/ns/libem/trp.s
new file mode 100644 (file)
index 0000000..cea74e4
--- /dev/null
@@ -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