add LCC - a better C-Compiler for WEGA
This commit is contained in:
parent
a456e1b61f
commit
5db4caa3bc
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
Loading…
Reference in New Issue