From 5db4caa3bc34c7d0a257823f5bfb6f7269205152 Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Wed, 14 Mar 1990 21:11:41 +0000 Subject: [PATCH] add LCC - a better C-Compiler for WEGA --- WEGA/contrib/lcc/lib/libc/u8k/gen/memset.s | 32 +++++++++++++++++++ WEGA/contrib/lcc/lib/libc/u8k/gen/setjmp.s | 37 ++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 WEGA/contrib/lcc/lib/libc/u8k/gen/memset.s create mode 100644 WEGA/contrib/lcc/lib/libc/u8k/gen/setjmp.s diff --git a/WEGA/contrib/lcc/lib/libc/u8k/gen/memset.s b/WEGA/contrib/lcc/lib/libc/u8k/gen/memset.s new file mode 100644 index 0000000..e3b1103 --- /dev/null +++ b/WEGA/contrib/lcc/lib/libc/u8k/gen/memset.s @@ -0,0 +1,32 @@ +// +// memset - set an array of nchars starting at s1 to the character c. +// Return s1. +// +// Input: s1 - destination +// c - initializing character +// n - number of bytes to copy +// + .seg + + sp := r15 + SP := rr14 + + .psec + .code +_memset:: + { + ldm r2,|_stkseg+4|(sp),#4 // rr2 = s1 + // r4 = c + // r5 = n + cp r5,#0 + ret le + ldb @rr2,rl4 + dec r5,#1 + ret z + ldl rr6,rr2 // destination + inc r7,#1 + ldl rr0,rr2 + ldirb @rr6,@rr2,r5 + ldl rr2,rr0 + ret + } diff --git a/WEGA/contrib/lcc/lib/libc/u8k/gen/setjmp.s b/WEGA/contrib/lcc/lib/libc/u8k/gen/setjmp.s new file mode 100644 index 0000000..a4bf863 --- /dev/null +++ b/WEGA/contrib/lcc/lib/libc/u8k/gen/setjmp.s @@ -0,0 +1,37 @@ +// C library -- setjmp, longjmp + +// longjmp(a,v) +// will generate a "return(v)" from +// the last call to +// setjmp(a) +// by restoring return_pc and r8-r15 from 'a' +// and doing a return. +// + + .seg + + sp := r15 + SP := rr14 + + .psec + .code +_setjmp:: + { + popl rr6,@SP // return addr + ldl rr4,@SP // a + ldm @rr4,r6,#10 + xor r2,r2 // return 0 + jp @rr6 + } +_longjmp:: + { + inc sp,#4 + ldl rr4,@SP // a + ld r2,|_stkseg+4|(sp) // v + test r2 + jr nz,~L1 + ld r2,#1 // force v non-zero +~L1: + ldm r6,@rr4,#10 + jp @rr6 // return v but as if from setjmp + }