190075Sobrien/* stuff needed for libgcc on win32.  */
252284Sobrien
352284Sobrien#ifdef L_chkstk
452284Sobrien
552284Sobrien	.global __chkstk
652284Sobrien	.global	__alloca
752284Sobrien__chkstk:
852284Sobrien__alloca:
952284Sobrien	pushl  %ecx		/* save temp */
1052284Sobrien	movl   %esp,%ecx	/* get sp */
1152284Sobrien	addl   $0x8,%ecx	/* and point to return addr */
1252284Sobrien
1352284Sobrienprobe: 	cmpl   $0x1000,%eax	/* > 4k ?*/
1452284Sobrien	jb    done		
1552284Sobrien
1652284Sobrien	subl   $0x1000,%ecx  		/* yes, move pointer down 4k*/
1752284Sobrien	orl    $0x0,(%ecx)   		/* probe there */
1852284Sobrien	subl   $0x1000,%eax  	 	/* decrement count */
1952284Sobrien	jmp    probe           	 	/* and do it again */
2052284Sobrien
2152284Sobriendone: 	subl   %eax,%ecx	   
2252284Sobrien	orl    $0x0,(%ecx)	/* less that 4k, just peek here */
2352284Sobrien
2452284Sobrien	movl   %esp,%eax
2552284Sobrien	movl   %ecx,%esp	/* decrement stack */
2652284Sobrien
2752284Sobrien	movl   (%eax),%ecx	/* recover saved temp */
2852284Sobrien	movl   4(%eax),%eax	/* get return address */
2952284Sobrien	jmp    *%eax	
3052284Sobrien
3152284Sobrien
3252284Sobrien#endif
33