From bab801171f7afef1d0e6aa579b90be3ded31b51d Mon Sep 17 00:00:00 2001 From: ceriel Date: Thu, 18 Feb 1988 10:08:42 +0000 Subject: [PATCH] Initial revision --- mach/arm/libem/.distr | 5 ++++ mach/arm/libem/LIST | 4 ++++ mach/arm/libem/Makefile | 21 +++++++++++++++++ mach/arm/libem/dvi.s | 31 +++++++++++++++++++++++++ mach/arm/libem/end.s | 16 +++++++++++++ mach/arm/libem/head_em.s | 49 ++++++++++++++++++++++++++++++++++++++++ mach/arm/libem/los.s | 27 ++++++++++++++++++++++ mach/arm/libem/mli.s | 27 ++++++++++++++++++++++ mach/arm/libem/sts.s | 27 ++++++++++++++++++++++ 9 files changed, 207 insertions(+) create mode 100644 mach/arm/libem/.distr create mode 100644 mach/arm/libem/LIST create mode 100644 mach/arm/libem/Makefile create mode 100644 mach/arm/libem/dvi.s create mode 100644 mach/arm/libem/end.s create mode 100644 mach/arm/libem/head_em.s create mode 100644 mach/arm/libem/los.s create mode 100644 mach/arm/libem/mli.s create mode 100644 mach/arm/libem/sts.s diff --git a/mach/arm/libem/.distr b/mach/arm/libem/.distr new file mode 100644 index 000000000..4b54deca3 --- /dev/null +++ b/mach/arm/libem/.distr @@ -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 index 000000000..ce36a63bb --- /dev/null +++ b/mach/arm/libem/LIST @@ -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 index 000000000..b2c179d96 --- /dev/null +++ b/mach/arm/libem/Makefile @@ -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 index 000000000..be6b89cd4 --- /dev/null +++ b/mach/arm/libem/dvi.s @@ -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 index 000000000..e31db94e0 --- /dev/null +++ b/mach/arm/libem/end.s @@ -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 index 000000000..785cc3662 --- /dev/null +++ b/mach/arm/libem/head_em.s @@ -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 index 000000000..5c8ae9576 --- /dev/null +++ b/mach/arm/libem/los.s @@ -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 index 000000000..d6f853e62 --- /dev/null +++ b/mach/arm/libem/mli.s @@ -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 index 000000000..39e555bf7 --- /dev/null +++ b/mach/arm/libem/sts.s @@ -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 -- 2.34.1