⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppc.s

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 S
字号:
/*  GRT stack implementation for ppc.    Copyright (C) 2005 Tristan Gingold.    GHDL is free software; you can redistribute it and/or modify it under    the terms of the GNU General Public License as published by the Free    Software Foundation; either version 2, or (at your option) any later    version.    GHDL is distributed in the hope that it will be useful, but WITHOUT ANY    WARRANTY; without even the implied warranty of MERCHANTABILITY or    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License    for more details.    You should have received a copy of the GNU General Public License    along with GCC; see the file COPYING.  If not, write to the Free    Software Foundation, 59 Temple Place - Suite 330, Boston, MA    02111-1307, USA.*/	.file		"ppc.S"		.section	".text"#define OFF 240#define GREG(x) x#define FREG(x) x	#define r0 GREG(0)#define r1 GREG(1)#define r2 GREG(2)#define r3 GREG(3)#define r4 GREG(4)#define r5 GREG(5)#define r6 GREG(6)#define r7 GREG(7)#define r8 GREG(8)#define r9 GREG(9)#define r10 GREG(10)#define r11 GREG(11)#define r12 GREG(12)#define r13 GREG(13)#define r14 GREG(14)#define r15 GREG(15)#define r16 GREG(16)#define r17 GREG(17)#define r18 GREG(18)#define r19 GREG(19)#define r20 GREG(20)#define r21 GREG(21)#define r22 GREG(22)#define r23 GREG(23)#define r24 GREG(24)#define r25 GREG(25)#define r26 GREG(26)#define r27 GREG(27)#define r28 GREG(28)#define r29 GREG(29)#define r30 GREG(30)#define r31 GREG(31)#define f0 FREG(0)#define f1 FREG(1)#define f2 FREG(2)#define f3 FREG(3)#define f4 FREG(4)#define f5 FREG(5)#define f6 FREG(6)#define f7 FREG(7)#define f8 FREG(8)#define f9 FREG(9)#define f10 FREG(10)#define f11 FREG(11)#define f12 FREG(12)#define f13 FREG(13)#define f14 FREG(14)#define f15 FREG(15)#define f16 FREG(16)#define f17 FREG(17)#define f18 FREG(18)#define f19 FREG(19)#define f20 FREG(20)#define f21 FREG(21)#define f22 FREG(22)#define f23 FREG(23)#define f24 FREG(24)#define f25 FREG(25)#define f26 FREG(26)#define f27 FREG(27)#define f28 FREG(28)#define f29 FREG(29)#define f30 FREG(30)#define f31 FREG(31)	/* Stack structure is:           +4 :	cur_length   \  Stack	   +0 :	cur_sp       /  Context	   -4 :	arg	   -8 :	func		   -12:	pad	   -16: pad           -20: LR save word	   -24:	Back chain		   -28: fp/gp saved registers. 	   -4 :	return address	   -8 :	process function to be executed           -12:	function argument	   ...           -72:	%sp	*/		/* Function called to loop on the process.  */		.align 4	.type	grt_stack_loop,@functiongrt_stack_loop:	/* Get function.  */	lwz	r0,16(r1)	/* Get argument.  */	lwz	r3,20(r1)	mtlr	r0	blrl	b	grt_stack_loop	.size	grt_stack_loop, . - grt_stack_loop	/* function Stack_Create (Func : Address; Arg : Address)	                         return Stack_Type;  */	.align	4	.global grt_stack_create	.type	 grt_stack_create,@functiongrt_stack_create:	/* Standard prologue.  */	stwu	r1,-32(r1)	mflr	r0	stw	r0,36(r1)	/* Save arguments.  */	stw	r3,24(r1)	stw	r4,28(r1)		/* Allocate the stack, and exit in case of failure  */	bl	grt_stack_allocate	cmpwi	0,r3,0	beq-	.Ldone	/* Note: r3 contains the address of the stack_context.  This is	   also the top of the stack.  */					/* Prepare stack.  */	/* Align the stack.  */	addi	r5,r3,-24	/* Save the parameters.  */	lwz	r6,24(r1)	stw	r6,16(r5)	lwz	r7,28(r1)	stw	r7,20(r5)		/* The return function.  */	lis	r4,grt_stack_loop@ha	la	r4,grt_stack_loop@l(r4)	stw	r4,4(r5)	/* Back-Chain.  */	addi	r4,r1,32	stw	r4,0(r5)	/* Save register.	   They should be considered as garbage.  */	addi	r4,r5,-OFF		stfd	f31,(OFF - 8)(r4)	stfd	f30,(OFF - 16)(r4)	stfd	f29,(OFF - 24)(r4)	stfd	f28,(OFF - 32)(r4)	stfd	f27,(OFF - 40)(r4)	stfd	f26,(OFF - 48)(r4)	stfd	f25,(OFF - 56)(r4)	stfd	f24,(OFF - 64)(r4)	stfd	f23,(OFF - 72)(r4)	stfd	f22,(OFF - 80)(r4)	stfd	f21,(OFF - 88)(r4)	stfd	f20,(OFF - 96)(r4)	stfd	f19,(OFF - 104)(r4)	stfd	f18,(OFF - 112)(r4)	stfd	f17,(OFF - 120)(r4)	stfd	f16,(OFF - 128)(r4)	stfd	f15,(OFF - 136)(r4)	stfd	f14,(OFF - 144)(r4)	stw	r31,(OFF - 148)(r4)	stw	r30,(OFF - 152)(r4)	stw	r29,(OFF - 156)(r4)	stw	r28,(OFF - 160)(r4)	stw	r27,(OFF - 164)(r4)	stw	r26,(OFF - 168)(r4)	stw	r25,(OFF - 172)(r4)	stw	r24,(OFF - 176)(r4)	stw	r23,(OFF - 180)(r4)	stw	r22,(OFF - 184)(r4)	stw	r21,(OFF - 188)(r4)	stw	r20,(OFF - 192)(r4)	stw	r19,(OFF - 196)(r4)	stw	r18,(OFF - 200)(r4)	stw	r17,(OFF - 204)(r4)	stw	r16,(OFF - 208)(r4)	stw	r15,(OFF - 212)(r4)	stw	r14,(OFF - 216)(r4)	mfcr	r0	stw	r0, (OFF - 220)(r4)	/* Save stack pointer.  */	stw	r4, 0(r3).Ldone:	lwz	r0,36(r1)	mtlr	r0	addi	r1,r1,32	blr	.size	 grt_stack_create,. - grt_stack_create	.align 4	.global grt_stack_switch	/* Arguments:	TO, FROM.	   Both are pointers to a stack_context.  */	.type	 grt_stack_switch,@functiongrt_stack_switch:	/* Standard prologue, save return address.  */	stwu	r1,(-OFF)(r1)	mflr	r0	stw	r0,(OFF + 4)(r1)	/* Save r14-r31, f14-f31, CR	   This is 18 words + 18 double words, ie 216 bytes.  */	/* Maybe use the savefpr function ? */	stfd	f31,(OFF - 8)(r1)	stfd	f30,(OFF - 16)(r1)	stfd	f29,(OFF - 24)(r1)	stfd	f28,(OFF - 32)(r1)	stfd	f27,(OFF - 40)(r1)	stfd	f26,(OFF - 48)(r1)	stfd	f25,(OFF - 56)(r1)	stfd	f24,(OFF - 64)(r1)	stfd	f23,(OFF - 72)(r1)	stfd	f22,(OFF - 80)(r1)	stfd	f21,(OFF - 88)(r1)	stfd	f20,(OFF - 96)(r1)	stfd	f19,(OFF - 104)(r1)	stfd	f18,(OFF - 112)(r1)	stfd	f17,(OFF - 120)(r1)	stfd	f16,(OFF - 128)(r1)	stfd	f15,(OFF - 136)(r1)	stfd	f14,(OFF - 144)(r1)	stw	r31,(OFF - 148)(r1)	stw	r30,(OFF - 152)(r1)	stw	r29,(OFF - 156)(r1)	stw	r28,(OFF - 160)(r1)	stw	r27,(OFF - 164)(r1)	stw	r26,(OFF - 168)(r1)	stw	r25,(OFF - 172)(r1)	stw	r24,(OFF - 176)(r1)	stw	r23,(OFF - 180)(r1)	stw	r22,(OFF - 184)(r1)	stw	r21,(OFF - 188)(r1)	stw	r20,(OFF - 192)(r1)	stw	r19,(OFF - 196)(r1)	stw	r18,(OFF - 200)(r1)	stw	r17,(OFF - 204)(r1)	stw	r16,(OFF - 208)(r1)	stw	r15,(OFF - 212)(r1)	stw	r14,(OFF - 216)(r1)	mfcr	r0	stw	r0, (OFF - 220)(r1)		/* Save stack pointer.  */	stw	r1, 0(r4)	/* Load stack pointer.  */	lwz	r1, 0(r3)				lfd	f31,(OFF - 8)(r1)	lfd	f30,(OFF - 16)(r1)	lfd	f29,(OFF - 24)(r1)	lfd	f28,(OFF - 32)(r1)	lfd	f27,(OFF - 40)(r1)	lfd	f26,(OFF - 48)(r1)	lfd	f25,(OFF - 56)(r1)	lfd	f24,(OFF - 64)(r1)	lfd	f23,(OFF - 72)(r1)	lfd	f22,(OFF - 80)(r1)	lfd	f21,(OFF - 88)(r1)	lfd	f20,(OFF - 96)(r1)	lfd	f19,(OFF - 104)(r1)	lfd	f18,(OFF - 112)(r1)	lfd	f17,(OFF - 120)(r1)	lfd	f16,(OFF - 128)(r1)	lfd	f15,(OFF - 136)(r1)	lfd	f14,(OFF - 144)(r1)	lwz	r31,(OFF - 148)(r1)	lwz	r30,(OFF - 152)(r1)	lwz	r29,(OFF - 156)(r1)	lwz	r28,(OFF - 160)(r1)	lwz	r27,(OFF - 164)(r1)	lwz	r26,(OFF - 168)(r1)	lwz	r25,(OFF - 172)(r1)	lwz	r24,(OFF - 176)(r1)	lwz	r23,(OFF - 180)(r1)	lwz	r22,(OFF - 184)(r1)	lwz	r21,(OFF - 188)(r1)	lwz	r20,(OFF - 192)(r1)	lwz	r19,(OFF - 196)(r1)	lwz	r18,(OFF - 200)(r1)	lwz	r17,(OFF - 204)(r1)	lwz	r16,(OFF - 208)(r1)	lwz	r15,(OFF - 212)(r1)	lwz	r14,(OFF - 216)(r1)	lwz	r0, (OFF - 220)(r1)	mtcr	r0	lwz	r0,(OFF + 4)(r1)	mtlr	r0	addi	r1,r1,OFF	blr	.size	 grt_stack_switch, . - grt_stack_switch		.ident	"Written by T.Gingold"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -