mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 13:09:22 +02:00
* More changes to better obey ABI rules
git-svn-id: trunk@23588 -
This commit is contained in:
parent
77bbb8b5bc
commit
bb1e7646cb
@ -58,26 +58,36 @@ _dynamic_start:
|
|||||||
*/
|
*/
|
||||||
_start:
|
_start:
|
||||||
.ent _start
|
.ent _start
|
||||||
|
.frame $sp,36,$ra
|
||||||
/* load fp */
|
/* load fp */
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.cpload $25
|
.cpload $25
|
||||||
|
|
||||||
/* Record $sp into $s8 */
|
/* Record $sp into $t1,
|
||||||
move $s8,$sp
|
to cope with unknown alignment value. */
|
||||||
|
move $t1,$sp
|
||||||
|
|
||||||
/* align stack */
|
/* align stack */
|
||||||
li $at,-8
|
li $at,-8
|
||||||
and $sp,$sp,$at
|
and $sp,$sp,$at
|
||||||
addiu $sp,$sp,-32
|
addiu $sp,$sp,-36
|
||||||
|
|
||||||
|
/* Save needed regs:
|
||||||
|
$t1, at offset 20
|
||||||
|
$gp ($28), at offset 24
|
||||||
|
$s8 ($30), at offset 28
|
||||||
|
$ra ($31), at offset 32
|
||||||
|
*/
|
||||||
|
|
||||||
/* Compute and save sp offset */
|
/* Compute and save sp offset */
|
||||||
subu $t1,$s8,$sp
|
subu $t1,$t1,$sp
|
||||||
sw $t1,24($sp)
|
sw $t1,20($sp)
|
||||||
|
|
||||||
/* Save $ra register */
|
|
||||||
sw $ra,28($sp)
|
|
||||||
/* Save $gp register */
|
/* Save $gp register */
|
||||||
.cprestore 20
|
.cprestore 24
|
||||||
|
/* Save previous $s8 at offset 28 */
|
||||||
|
sw $s8,28($sp)
|
||||||
|
/* Save $ra register */
|
||||||
|
sw $ra,32($sp)
|
||||||
|
|
||||||
/* Set __stkptr variable */
|
/* Set __stkptr variable */
|
||||||
move $s8,$sp
|
move $s8,$sp
|
||||||
@ -104,14 +114,16 @@ _start:
|
|||||||
sb $t2,($t1)
|
sb $t2,($t1)
|
||||||
/* Jump to PASCALMAIN */
|
/* Jump to PASCALMAIN */
|
||||||
la $t9,PASCALMAIN
|
la $t9,PASCALMAIN
|
||||||
jalr $t9
|
jal $t9
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* Restore $ra */
|
/* Restore $ra */
|
||||||
lw $ra,28($sp)
|
lw $ra,32($sp)
|
||||||
|
/* Restore $s8 */
|
||||||
|
lw $s8,28($sp)
|
||||||
|
|
||||||
/* Restore old $sp */
|
/* Restore old $sp */
|
||||||
lw $t1,24($sp)
|
lw $t1,20($sp)
|
||||||
addu $sp,$sp,$t1
|
addu $sp,$sp,$t1
|
||||||
/* Return to caller */
|
/* Return to caller */
|
||||||
jr $ra
|
jr $ra
|
||||||
|
Loading…
Reference in New Issue
Block a user