#include "ghcconfig.h"
#include "rts/Constants.h"

#if defined(powerpc64le_HOST_ARCH)
# ifdef linux_HOST_OS
# define STACK_FRAME_SIZE RESERVED_C_STACK_BYTES+304
	.file	"StgCRun.c"
	.abiversion 2
	.section	".toc","aw"
	.section	".text"
	.align 2
.globl StgRun
.hidden StgRun
.type StgRun,@function
StgRun:
.localentry StgRun,.-StgRun
	mflr 0
	mr 5, 1
	std 0, 16(1)
	stdu 1, -(STACK_FRAME_SIZE)(1)
	std 2, -296(5)
	std 14, -288(5)
	std 15, -280(5)
	std 16, -272(5)
	std 17, -264(5)
	std 18, -256(5)
	std 19, -248(5)
	std 20, -240(5)
	std 21, -232(5)
	std 22, -224(5)
	std 23, -216(5)
	std 24, -208(5)
	std 25, -200(5)
	std 26, -192(5)
	std 27, -184(5)
	std 28, -176(5)
	std 29, -168(5)
	std 30, -160(5)
	std 31, -152(5)
	stfd 14, -144(5)
	stfd 15, -136(5)
	stfd 16, -128(5)
	stfd 17, -120(5)
	stfd 18, -112(5)
	stfd 19, -104(5)
	stfd 20, -96(5)
	stfd 21, -88(5)
	stfd 22, -80(5)
	stfd 23, -72(5)
	stfd 24, -64(5)
	stfd 25, -56(5)
	stfd 26, -48(5)
	stfd 27, -40(5)
	stfd 28, -32(5)
	stfd 29, -24(5)
	stfd 30, -16(5)
	stfd 31, -8(5)
	mr 27, 4
	mtctr 3
	mr 12, 3
	bctr
.globl StgReturn
.type StgReturn,@function
StgReturn:
.localentry StgReturn,.-StgReturn
	mr 3,14
	la 5, STACK_FRAME_SIZE(1)
	ld 2, -296(5)
	ld 14, -288(5)
	ld 15, -280(5)
	ld 16, -272(5)
	ld 17, -264(5)
	ld 18, -256(5)
	ld 19, -248(5)
	ld 20, -240(5)
	ld 21, -232(5)
	ld 22, -224(5)
	ld 23, -216(5)
	ld 24, -208(5)
	ld 25, -200(5)
	ld 26, -192(5)
	ld 27, -184(5)
	ld 28, -176(5)
	ld 29, -168(5)
	ld 30, -160(5)
	ld 31, -152(5)
	lfd 14, -144(5)
	lfd 15, -136(5)
	lfd 16, -128(5)
	lfd 17, -120(5)
	lfd 18, -112(5)
	lfd 19, -104(5)
	lfd 20, -96(5)
	lfd 21, -88(5)
	lfd 22, -80(5)
	lfd 23, -72(5)
	lfd 24, -64(5)
	lfd 25, -56(5)
	lfd 26, -48(5)
	lfd 27, -40(5)
	lfd 28, -32(5)
	lfd 29, -24(5)
	lfd 30, -16(5)
	lfd 31, -8(5)
	mr 1, 5
	ld 0, 16(1)
	mtlr 0
	blr

	.section	.note.GNU-stack,"",@progbits
# else // linux_HOST_OS
# error Only Linux support for power64 little endian right now.
# endif

#elif defined(powerpc_HOST_ARCH)
# if defined(aix_HOST_OS)
# define STACK_FRAME_SIZE RESERVED_C_STACK_BYTES+224
	.toc
	.csect StgRun[DS]
	.globl StgRun[DS]
	.long .StgRun, TOC[TC0], 0
	.csect .text[PR]
	.globl .StgRun
.StgRun:
	mflr  0
	mr    5,1
	stw   0,8(1)
	stwu  1,-(STACK_FRAME_SIZE)(1)
	stw   2,-224(5)
	stmw 13,-220(5)
	stfd 14,-144(5)
	stfd 15,-136(5)
	stfd 16,-128(5)
	stfd 17,-120(5)
	stfd 18,-112(5)
	stfd 19,-104(5)
	stfd 20,-96(5)
	stfd 21,-88(5)
	stfd 22,-80(5)
	stfd 23,-72(5)
	stfd 24,-64(5)
	stfd 25,-56(5)
	stfd 26,-48(5)
	stfd 27,-40(5)
	stfd 28,-32(5)
	stfd 29,-24(5)
	stfd 30,-16(5)
	stfd 31,-8(5)
	mr   27,4
	mtctr 3
	bctr

	.globl StgReturn
StgReturn:
	mr   3,14
	la   5,(STACK_FRAME_SIZE)(1)
	lwz  2,-224(5)
	lmw 13,-220(5)
	lfd 14,-144(5)
	lfd 15,-136(5)
	lfd 16,-128(5)
	lfd 17,-120(5)
	lfd 18,-112(5)
	lfd 19,-104(5)
	lfd 20,-96(5)
	lfd 21,-88(5)
	lfd 22,-80(5)
	lfd 23,-72(5)
	lfd 24,-64(5)
	lfd 25,-56(5)
	lfd 26,-48(5)
	lfd 27,-40(5)
	lfd 28,-32(5)
	lfd 29,-24(5)
	lfd 30,-16(5)
	lfd 31,-8(5)
	mr   1,5
	lwz  0,8(1)
	mtlr 0
	blr

# endif // aix_HOST_OS
#endif