Imported from ../bash-1.14.7.tar.gz.
This commit is contained in:
commit
726f63884d
402 changed files with 150297 additions and 0 deletions
63
lib/malloc/x386-alloca.s
Normal file
63
lib/malloc/x386-alloca.s
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
;; alloca386.s 1.2
|
||||
;; GNU-compatible stack allocation function for Xenix/386.
|
||||
;; Written by Chip Salzenberg at ComDev.
|
||||
;; Last modified 90/01/11
|
||||
;;> Is your alloca clearly better than the one in i386-alloca.s? I haven't
|
||||
;;> looked at either.
|
||||
;;
|
||||
;;They're different because Xenix/386 has a different assembler. SCO
|
||||
;;Xenix has the Microsoft C compiler and the Microsoft macro assembler,
|
||||
;;called "masm". MASM's assembler syntax is quite different from AT&T's
|
||||
;;in all sorts of ways. Xenix people can't use the AT&T version.
|
||||
;;--
|
||||
;;Chip Salzenberg at ComDev/TCT <chip@tct.uucp>, <uunet!ateng!tct!chip>
|
||||
|
||||
TITLE $alloca386
|
||||
|
||||
.386
|
||||
DGROUP GROUP CONST, _BSS, _DATA
|
||||
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
|
||||
_DATA ENDS
|
||||
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
|
||||
_BSS ENDS
|
||||
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
|
||||
CONST ENDS
|
||||
_TEXT SEGMENT DWORD USE32 PUBLIC 'CODE'
|
||||
ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
|
||||
|
||||
PUBLIC _alloca
|
||||
_alloca PROC NEAR
|
||||
|
||||
; Get argument.
|
||||
pop edx ; edx -> return address
|
||||
pop eax ; eax = amount to allocate
|
||||
|
||||
; Validate allocation amount.
|
||||
add eax,3
|
||||
and eax,not 3
|
||||
cmp eax,0
|
||||
jg aa_size_ok
|
||||
mov eax,4
|
||||
aa_size_ok:
|
||||
|
||||
; Allocate stack space.
|
||||
mov ecx,esp ; ecx -> old stack pointer
|
||||
sub esp,eax ; perform allocation
|
||||
mov eax,esp ; eax -> new stack pointer
|
||||
|
||||
; Copy the three saved register variables from old stack top to new stack top.
|
||||
; They may not be there. So we waste twelve bytes. Big fat hairy deal.
|
||||
push DWORD PTR 8[ecx]
|
||||
push DWORD PTR 4[ecx]
|
||||
push DWORD PTR 0[ecx]
|
||||
|
||||
; Push something so the caller can pop it off.
|
||||
push eax
|
||||
|
||||
; Return to caller.
|
||||
jmp edx
|
||||
|
||||
_alloca ENDP
|
||||
|
||||
_TEXT ENDS
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue