Initial revision
authorceriel <none@none>
Thu, 18 Feb 1988 10:08:42 +0000 (10:08 +0000)
committerceriel <none@none>
Thu, 18 Feb 1988 10:08:42 +0000 (10:08 +0000)
mach/arm/libem/.distr [new file with mode: 0644]
mach/arm/libem/LIST [new file with mode: 0644]
mach/arm/libem/Makefile [new file with mode: 0644]
mach/arm/libem/dvi.s [new file with mode: 0644]
mach/arm/libem/end.s [new file with mode: 0644]
mach/arm/libem/head_em.s [new file with mode: 0644]
mach/arm/libem/los.s [new file with mode: 0644]
mach/arm/libem/mli.s [new file with mode: 0644]
mach/arm/libem/sts.s [new file with mode: 0644]

diff --git a/mach/arm/libem/.distr b/mach/arm/libem/.distr
new file mode 100644 (file)
index 0000000..4b54dec
--- /dev/null
@@ -0,0 +1,5 @@
+LIST
+Makefile
+end.s
+head_em.s
+tail_em.a
diff --git a/mach/arm/libem/LIST b/mach/arm/libem/LIST
new file mode 100644 (file)
index 0000000..ce36a63
--- /dev/null
@@ -0,0 +1,4 @@
+los.s
+sts.s
+dvi.s
+mli.s
diff --git a/mach/arm/libem/Makefile b/mach/arm/libem/Makefile
new file mode 100644 (file)
index 0000000..b2c179d
--- /dev/null
@@ -0,0 +1,21 @@
+all:
+
+install:       
+               ../../install head_em.s head_em
+               ../../install libem_s.a tail_em
+               ../../install end.s end_em
+
+cmp:
+               -../../compare head_em.s head_em
+               -../../compare libem_s.a tail_em
+               -../../compare end.s end_em
+
+clean:
+
+opr :
+       make pr | opr
+
+pr:
+       @pr `pwd`/head_em.s
+       @arch pv libem_s.a | pr -h `pwd`/libem_s.a
+       @pr `pwd`/end.s
diff --git a/mach/arm/libem/dvi.s b/mach/arm/libem/dvi.s
new file mode 100644 (file)
index 0000000..be6b89c
--- /dev/null
@@ -0,0 +1,31 @@
+.define        .dvi
+
+       .sect .text
+
+.dvi:  LDMFD R12<,{R1,R2}
+       MOV R3,#0
+       CMP R1,#0
+       ADD.MI R3,R3,#1
+       RSB.MI R1,R1,#0
+       CMP R2,#0
+       ADD.MI R3,R3,#2
+       RSB.MI R2,R2,#0
+       MOV R0,#1
+div1:  CMP R1,#0x80000000
+       CMP.CC R1,R2
+       MOV.CC R1,R1,ASL #1
+       MOV.CC R0,R0,ASL #1
+       BCC div1
+       MOV R3,#0
+div2:  CMP R2,R1
+       SUB.CS R2,R2,R1
+       ADD.CS R3,R3,R0
+       MOV.S R0,R0,LSR #1
+       MOV.NE R1,R1,LSR #1
+       BNE div2
+       TST R4, #2
+       RSB.NE R2,R2,#0
+       TST R4, #1
+       TST.NE R4, #1
+       RSB.NE R3,R3,#0
+       MOV R15,R14
diff --git a/mach/arm/libem/end.s b/mach/arm/libem/end.s
new file mode 100644 (file)
index 0000000..e31db94
--- /dev/null
@@ -0,0 +1,16 @@
+.define        _endtext,_enddata,_endbss
+.sect .text
+       .align 4
+.sect .rom
+       .align 4
+.sect .data
+       .align 4
+.sect .bss
+       .align 4
+
+       .sect .text
+_endtext:
+       .sect .data
+_enddata:
+       .sect .bss
+_endbss:
diff --git a/mach/arm/libem/head_em.s b/mach/arm/libem/head_em.s
new file mode 100644 (file)
index 0000000..785cc36
--- /dev/null
@@ -0,0 +1,49 @@
+.define        begdat, begbss
+.define        hol0, argv, envp, reghp
+.define ignmask, trpreg, rcktrap
+
+.sect  .text
+.sect  .rom
+.sect  .data
+.sect  .bss
+
+.sect  .text
+
+       ADR R0,begbss
+       ADR R1,_endbss
+       MOV R2,#0
+1:
+       STR R2,[R0],#4
+       CMP R0,R1
+       BGT 1b
+
+       MOV R12, #0x100000
+       ADR R11, envp
+       STMFD R12<, {R11}
+       ADR R11, argv
+       STMFD R12<, {R11}
+       MOV R11, #1
+       STMFD R12<, {R11}
+       BAL.L _m_a_i_n
+rcktrap:
+       SWI 1
+
+.sect .bss
+begbss:
+.sect .data
+begdat:
+hol0:
+       .data4 0
+       .data4 0
+argv:
+       .data4 2f
+envp:
+       .data4 0
+2:
+       .asciz 'PROGRAM'
+reghp: 
+       .data4 _endbss
+ignmask:
+       .data4 0
+trpreg:
+       .data4 0
diff --git a/mach/arm/libem/los.s b/mach/arm/libem/los.s
new file mode 100644 (file)
index 0000000..5c8ae95
--- /dev/null
@@ -0,0 +1,27 @@
+.define        .los
+
+       .sect .text
+
+.los:  LDMFD R12<,{R0,R1}
+       CMP R0, #8
+       BGE 2F
+       CMP R0,#1
+       LDR.EQ.B R2,[R1]
+       CMP R0,#4
+       LDR.EQ R2,[R1]
+       CMP R0,#2
+       BNE 1F
+       LDR.EQ.B R2,[R1]
+       LDR.EQ.B R3,[R1,#1]
+       ADD R2,R2,R3,LSL #8
+1:
+       STMFD R12<,{R2}
+       BAL 3F
+2:
+       SUB R0,R0,#4
+       LDR R11,[R1,R0]
+       STMFD R12<,{R11}
+       CMP R0,#0
+       BNE 2B
+3:
+       MOV R15,R14
diff --git a/mach/arm/libem/mli.s b/mach/arm/libem/mli.s
new file mode 100644 (file)
index 0000000..d6f853e
--- /dev/null
@@ -0,0 +1,27 @@
+.define        .mli
+
+       .sect .text
+
+.mli:  LDMFD R12<,{R1,R2}
+       MOV R3,#0
+       MOV R0,#0
+       CMP R1,#0
+       ADD.MI R3,R3,#1
+       RSB.MI R1,R1,#0
+       CMP R2,#0
+       ADD.MI R3,R3,#1
+       RSB.MI R2,R2,#0
+       CMP R1,R2
+       BLT 1F
+       MOV R4,R1
+       MOV R1,R2
+       MOV R2,R4
+1:
+       TST R1,#1
+       ADD.NE R0,R0,R2
+       MOV R2,R2,LSL #1
+       MOV.S R1,R1,LSR #1
+       BNE 1B
+       TST R3,#1
+       RSB.NE R0,R0,#0
+       MOV R15,R14
diff --git a/mach/arm/libem/sts.s b/mach/arm/libem/sts.s
new file mode 100644 (file)
index 0000000..39e555b
--- /dev/null
@@ -0,0 +1,27 @@
+.define        .sts
+
+       .sect .text
+
+.sts:  LDMFD R12<,{R0,R1,R2}
+       CMP R0, #8
+       BGE 2f
+       CMP R0, #1
+       STR.EQ.B R2,[R1]
+       CMP R0, #4
+       STR.EQ R2,[R1]
+       CMP R0,#2
+       MOV.NE R15,R14
+       MOV R3,R2,LSR #8
+       SUB R2,R2,R3,LSL #8
+       STR.EQ.B R2,[R1]
+       STR.EQ.B R3,[R1,#1]
+       MOV R15,R14
+2:
+       ADD R3,R1,R0
+1:
+       STR R2,[R1]
+       ADD R1,R1,#4
+       CMP R1,R3
+       MOV.EQ R15,R14
+       STMFD R12<,{R2}
+       BAL 1b