PPC port cleaned up, static linking works well now.

This commit is contained in:
rofl0r 2012-11-09 23:36:55 +01:00
commit 1c8eb8bad7
55 changed files with 1373 additions and 1095 deletions

View file

@ -0,0 +1,47 @@
.global _longjmp
.global longjmp
.type _longjmp,@function
.type longjmp,@function
_longjmp:
longjmp:
# void longjmp(jmp_buf env, int val);
# put val into return register and restore the env saved in setjmp
# if val(r4) is 0, put 1 there.
# 0) move old return address into r0
lwz 0, 0(3)
# 1) put it into link reg
mtlr 0
#2 ) restore stack ptr
lwz 1, 4(3)
#3) restore control reg
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)
#5) put val into return reg r3
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
1:
blr

View file

@ -0,0 +1,40 @@
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
__setjmp:
_setjmp:
setjmp:
# 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)
# 2) store cr
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)
# 4) set return value to 0
li 3, 0
# 5) return
blr

View file

@ -1,17 +0,0 @@
#include <bits/asm.h>
.global _longjmp
.global longjmp
.type _longjmp,@function
.type longjmp,@function
_longjmp:
longjmp:
cmpi 7, 0, r3, 0
bne 7, 1f
addi r3, r3, 1
1: lmw r8, 4(r3) // load r8-r31
mr r6, r4
mtlr r11
mtcr r12
mr r2, r9
mr r1, r10
blr

View file

@ -1,18 +0,0 @@
#include <bits/asm.h>
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
__setjmp:
_setjmp:
setjmp:
mflr r11
mfcr r12
mr r10, r1
mr r9, r2
stmw r8, 0(r3) // save r8-r31
li r3,0
blr