From: em Date: Fri, 26 Jul 1985 11:56:24 +0000 (+0000) Subject: Initial revision X-Git-Tag: release-5-5~5425 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=6bdc39213b11a548ff59ec6cdd3fc6e8a6a38e77;p=ack.git Initial revision --- diff --git a/mach/ns/libem/LIST b/mach/ns/libem/LIST new file mode 100644 index 000000000..227c18ee9 --- /dev/null +++ b/mach/ns/libem/LIST @@ -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 index 000000000..0a2dc3f5b --- /dev/null +++ b/mach/ns/libem/Makefile @@ -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 index 000000000..984c57f04 --- /dev/null +++ b/mach/ns/libem/aar.s @@ -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 index 000000000..f1cae1da9 --- /dev/null +++ b/mach/ns/libem/cff.s @@ -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 index 000000000..c05456269 --- /dev/null +++ b/mach/ns/libem/cfi.s @@ -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 index 000000000..820981843 --- /dev/null +++ b/mach/ns/libem/cif.s @@ -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 index 000000000..d25b5fa25 --- /dev/null +++ b/mach/ns/libem/cii.s @@ -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 index 000000000..e8b0d501b --- /dev/null +++ b/mach/ns/libem/cms.s @@ -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 index 000000000..66d381c41 --- /dev/null +++ b/mach/ns/libem/cmu.s @@ -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 index 000000000..5f16e4b00 --- /dev/null +++ b/mach/ns/libem/csa.s @@ -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 index 000000000..15bf815e9 --- /dev/null +++ b/mach/ns/libem/csb.s @@ -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 index 000000000..9252019df --- /dev/null +++ b/mach/ns/libem/dup.s @@ -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 index 000000000..34b8ba401 --- /dev/null +++ b/mach/ns/libem/dvu.s @@ -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 index 000000000..9225bd8c9 --- /dev/null +++ b/mach/ns/libem/end.s @@ -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 index 000000000..47bc38e33 --- /dev/null +++ b/mach/ns/libem/exg.s @@ -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 index 000000000..8d0199901 --- /dev/null +++ b/mach/ns/libem/gto.s @@ -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 index 000000000..8de2d964e --- /dev/null +++ b/mach/ns/libem/lar.s @@ -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 index 000000000..daf36cfb6 --- /dev/null +++ b/mach/ns/libem/los.s @@ -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 index 000000000..57ef54a58 --- /dev/null +++ b/mach/ns/libem/mon.s @@ -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 index 000000000..fa44c1ffe --- /dev/null +++ b/mach/ns/libem/print.s @@ -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 index 000000000..621304848 --- /dev/null +++ b/mach/ns/libem/prnl.s @@ -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 index 000000000..8d7a61aa4 --- /dev/null +++ b/mach/ns/libem/prstr.s @@ -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 index 000000000..d5fe98f2e --- /dev/null +++ b/mach/ns/libem/putchar.s @@ -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 index 000000000..8a22761a8 --- /dev/null +++ b/mach/ns/libem/rck.s @@ -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 index 000000000..670a606ff --- /dev/null +++ b/mach/ns/libem/rmu.s @@ -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 index 000000000..fe94845b4 --- /dev/null +++ b/mach/ns/libem/sar.s @@ -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 index 000000000..b95f0ecd4 --- /dev/null +++ b/mach/ns/libem/sts.s @@ -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 index 000000000..cea74e4e7 --- /dev/null +++ b/mach/ns/libem/trp.s @@ -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