Rev | Line | |
---|
[9] | 1 | #
|
---|
| 2 | ! alloca() - allocate space on the stack Author: Kees J. Bot
|
---|
| 3 | ! 2 Dec 1993
|
---|
| 4 | .sect .text; .sect .rom; .sect .data; .sect .bss
|
---|
| 5 |
|
---|
| 6 | .sect .text
|
---|
| 7 | .align 16
|
---|
| 8 | .define _alloca
|
---|
| 9 | _alloca:
|
---|
| 10 | #if __ACK__
|
---|
| 11 | pop ecx ! Return address
|
---|
| 12 | pop eax ! Bytes to allocate
|
---|
| 13 | add eax, 2*4+3 ! Add space for two saved register variables
|
---|
| 14 | andb al, 0xFC ! Align
|
---|
| 15 | mov ebx, esp ! Keep current esp
|
---|
| 16 | sub esp, eax ! Lower stack
|
---|
| 17 | mov eax, esp ! Return value
|
---|
| 18 | push 4(ebx) ! Push what is probably the saved esi
|
---|
| 19 | push (ebx) ! Saved edi
|
---|
| 20 | ! Now ACK can still do:
|
---|
| 21 | ! pop edi; pop esi; leave; ret
|
---|
| 22 | push eax ! Dummy argument
|
---|
| 23 | jmp ecx
|
---|
| 24 | #else
|
---|
| 25 | pop ecx ! Return address
|
---|
| 26 | pop eax ! Bytes to allocate
|
---|
| 27 | add eax, 3
|
---|
| 28 | andb al, 0xFC ! Align
|
---|
| 29 | sub esp, eax ! Lower stack
|
---|
| 30 | mov eax, esp ! Return value
|
---|
| 31 | push eax ! Dummy argument
|
---|
| 32 | jmp ecx
|
---|
| 33 | #endif
|
---|
Note:
See
TracBrowser
for help on using the repository browser.