scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 3b2d87bffa663ba8b3204d231eaf4c22c75146c9
parent ed9a13e97b13e1a63fe2bf6ce919f1c0426d20b3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Tue, 14 Sep 2021 14:47:48 +0200

libc: Update arch/ppc

This code is being updated out of the tree of scc and
it is time to synchroniza both copies now.

Diffstat:
Msrc/libc/arch/ppc/Makefile | 4++--
Msrc/libc/arch/ppc/crt-posix.s | 11++++++++++-
Msrc/libc/arch/ppc/linux/Makefile | 2+-
Msrc/libc/arch/ppc/longjmp.s | 91+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/libc/arch/ppc/setjmp.s | 90+++++++++++++++++++++++++++++++++++++++++--------------------------------------
5 files changed, 105 insertions(+), 93 deletions(-)

diff --git a/src/libc/arch/ppc/Makefile b/src/libc/arch/ppc/Makefile @@ -1,9 +1,9 @@ .POSIX: -DIRS =\ +PROJECTDIR = ../../../.. +DIRS = \ linux\ -PROJECTDIR =../../../.. include $(PROJECTDIR)/scripts/rules.mk include ../../rules.mk diff --git a/src/libc/arch/ppc/crt-posix.s b/src/libc/arch/ppc/crt-posix.s @@ -1,11 +1,20 @@ + .comm _environ,4,4 .text .globl _start _start: stwu 1,-16(1) + la 31,16(1) + lwz 3,0(31) /* argc */ + la 4,4(31) /* argv */ lis 14,_environ@h ori 14,14,_environ@l - stw 5,0(14) + la 5,0(14) + mulli 31,3,4 /* p = argc*4 */ + add 31,4,31 /* q = argv + p */ + addi 31,31,4 /* r = q + 4 */ + lwz 31,0(31) /* r = *r */ + stw 31,0(5) /* envp = r */ bl main b exit diff --git a/src/libc/arch/ppc/linux/Makefile b/src/libc/arch/ppc/linux/Makefile @@ -21,9 +21,9 @@ GENOBJS =\ _write.$O\ OBJS =\ + $(GENOBJS)\ _cerrno.o\ _sys_errlist.o\ - $(GENOBJS)\ GENSRC = $(GENOBJS:.o=.s) diff --git a/src/libc/arch/ppc/longjmp.s b/src/libc/arch/ppc/longjmp.s @@ -4,59 +4,58 @@ longjmp: /* 0) move old return address into r0 */ - lwz 0,0(3) + lwz 0,0(3) /* 1) put it into link reg */ - mtlr 0 + mtlr 0 /* 2 ) restore stack ptr */ - lwz 1,4(3) + lwz 1,4(3) /* 3) restore control reg */ - lwz 0,8(3) - mtcr 0 + lwz 0,8(3) + mtcr 0 /* 4) restore r14-r31 */ - lwz 14,12(3) - lwz 15,16(3) - lwz 16,20(3) - lwz 17,24(3) - lwz 18,28(3) - lwz 19,32(3) - lwz 20,36(3) - lwz 21,40(3) - lwz 22,44(3) - lwz 23,48(3) - lwz 24,52(3) - lwz 25,56(3) - lwz 26,60(3) - lwz 27,64(3) - lwz 28,68(3) - lwz 29,72(3) - lwz 30,76(3) - lwz 31,80(3) - lfd 14,88(3) - lfd 15,96(3) - lfd 16,104(3) - lfd 17,112(3) - lfd 18,120(3) - lfd 19,128(3) - lfd 20,136(3) - lfd 21,144(3) - lfd 22,152(3) - lfd 23,160(3) - lfd 24,168(3) - lfd 25,176(3) - lfd 26,184(3) - lfd 27,192(3) - lfd 28,200(3) - lfd 29,208(3) - lfd 30,216(3) - lfd 31,224(3) + lwz 14,12(3) + lwz 15,16(3) + lwz 16,20(3) + lwz 17,24(3) + lwz 18,28(3) + lwz 19,32(3) + lwz 20,36(3) + lwz 21,40(3) + lwz 22,44(3) + lwz 23,48(3) + lwz 24,52(3) + lwz 25,56(3) + lwz 26,60(3) + lwz 27,64(3) + lwz 28,68(3) + lwz 29,72(3) + lwz 30,76(3) + lwz 31,80(3) + lfd 14,88(3) + lfd 15,96(3) + lfd 16,104(3) + lfd 17,112(3) + lfd 18,120(3) + lfd 19,128(3) + lfd 20,136(3) + lfd 21,144(3) + lfd 22,152(3) + lfd 23,160(3) + lfd 24,168(3) + lfd 25,176(3) + lfd 26,184(3) + lfd 27,192(3) + lfd 28,200(3) + lfd 29,208(3) + lfd 30,216(3) + lfd 31,224(3) /* 5) put val into return reg r3 */ - mr 3,4 + mr 3,4 /* 6) check if return value is 0, make it 1 in that case */ - cmpwi cr7,4,0 - bne cr7,1f - li 3, 1 + cmpwi cr7,4,0 + bne cr7,1f + li 3,1 1: blr - diff --git a/src/libc/arch/ppc/setjmp.s b/src/libc/arch/ppc/setjmp.s @@ -3,54 +3,58 @@ .global setjmp setjmp: - /* 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg) */ - mflr 0 - stw 0,0(3) + /* + * 0) store IP int 0, + * then into the jmpbuf + * pointed to by r3 (first arg) + */ + mflr 0 + stw 0,0(3) /* 1) store reg1 (SP) */ - stw 1, 4(3) + stw 1,4(3) /* 2) store cr */ - mfcr 0 - stw 0,8(3) + mfcr 0 + stw 0,8(3) /* 3) store r14-31 */ - stw 14,12(3) - stw 15,16(3) - stw 16,20(3) - stw 17,24(3) - stw 18,28(3) - stw 19,32(3) - stw 20,36(3) - stw 21,40(3) - stw 22,44(3) - stw 23,48(3) - stw 24,52(3) - stw 25,56(3) - stw 26,60(3) - stw 27,64(3) - stw 28,68(3) - stw 29,72(3) - stw 30,76(3) - stw 31,80(3) - stfd 14,88(3) - stfd 15,96(3) - stfd 16,104(3) - stfd 17,112(3) - stfd 18,120(3) - stfd 19,128(3) - stfd 20,136(3) - stfd 21,144(3) - stfd 22,152(3) - stfd 23,160(3) - stfd 24,168(3) - stfd 25,176(3) - stfd 26,184(3) - stfd 27,192(3) - stfd 28,200(3) - stfd 29,208(3) - stfd 30,216(3) - stfd 31,224(3) + stw 14,12(3) + stw 15,16(3) + stw 16,20(3) + stw 17,24(3) + stw 18,28(3) + stw 19,32(3) + stw 20,36(3) + stw 21,40(3) + stw 22,44(3) + stw 23,48(3) + stw 24,52(3) + stw 25,56(3) + stw 26,60(3) + stw 27,64(3) + stw 28,68(3) + stw 29,72(3) + stw 30,76(3) + stw 31,80(3) + stfd 14,88(3) + stfd 15,96(3) + stfd 16,104(3) + stfd 17,112(3) + stfd 18,120(3) + stfd 19,128(3) + stfd 20,136(3) + stfd 21,144(3) + stfd 22,152(3) + stfd 23,160(3) + stfd 24,168(3) + stfd 25,176(3) + stfd 26,184(3) + stfd 27,192(3) + stfd 28,200(3) + stfd 29,208(3) + stfd 30,216(3) + stfd 31,224(3) /* 4) set return value to 0 */ - li 3,0 + li 3,0 /* 5) return */ blr