BSD 4_3_Reno release
[unix-history] / usr / src / lib / libc / i386 / gen / alloca.s
CommitLineData
33fde5e7
WN
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * William Jolitz.
7 *
1c15e888
C
8 * Redistribution and use in source and binary forms are permitted
9 * provided that: (1) source distributions retain this entire copyright
10 * notice and comment, and (2) distributions including binaries display
11 * the following acknowledgement: ``This product includes software
12 * developed by the University of California, Berkeley and its contributors''
13 * in the documentation or other materials provided with the distribution
14 * and in all advertising materials mentioning features or use of this
15 * software. Neither the name of the University nor the names of its
16 * contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
33fde5e7
WN
21 */
22
23#if defined(LIBC_SCCS) && !defined(lint)
1c15e888 24 .asciz "@(#)alloca.s 5.2 (Berkeley) 5/14/90"
33fde5e7
WN
25#endif /* LIBC_SCCS and not lint */
26
27/* like alloc, but automatic automatic free in return */
28
29#include "DEFS.h"
30
31ENTRY(alloca)
33fde5e7
WN
32 popl %edx /* pop return addr */
33 popl %eax /* pop amount to allocate */
34 movl %esp,%ecx
3608740e 35 addl $3,%eax /* round up to next word */
33fde5e7
WN
36 andl $0xfffffffc,%eax
37 subl %eax,%esp
3608740e 38 movl %esp,%eax /* base of newly allocated space */
33fde5e7
WN
39 pushl 8(%ecx) /* copy possible saved registers */
40 pushl 4(%ecx)
41 pushl 0(%ecx)
42 pushl %eax /* dummy to pop at callsite */
43 jmp %edx /* "return" */