view loader/wrapper.S @ 27148:858c01b81117

r26502: Document rgbtest arguments r26057: Fix copy&paste typo in rgbtest documentation r26198: Grayscale encoding/decoding with FFmpeg is no longer enabled, remove references r26221: Try to fix the description of what mbcmp influences, please fix if I misunderstood the code. r26231: better syntax for A key r26232: added missing escapes r26260: Experimental support for -framedrop with -correct-pts. r26271: Mention that '-frames 0' is useful with -identify, closes bug #1046. r26273: add "ipod" to the list of formats handled by lavf r26297: compacted new libavformat's 'ipod' description r26402: Enable runtime control for colorful and/or module name output r26427: Restore grayscale decoding support with FFmpeg. r26449: 10L, forgot to commit the documentation for the -noconfig options. r26460: restore options alphabetical order r26650: Update documentation for the gl2 driver to make clear gl is usually preferred. r26674: add h264 to list of supported codecs r26732: Mark new options Michael committed as undocumented. r26739: Oops, remove stray .TP. r26749: -psprobe can be used in mpeg-pes streams, too r26762: Add a new suboption to -vo xv and -vo xvmc that allows selection r26763: Remove '(pass 1/2)' from some lavcopts. These options really worked on r26795: Add support for AppleIR Remote as an input under Linux systems. r26798: Document the -noar command-line option in en/fr manpages. r26806: Document x264's AQ options r26853: Update gl vo section with the new force-pbo suboption. r26909: Add a slave command to stop stream playback. r26979: small spelling/wording fixes r26986: Document VIDIXIVTVALPHA environment variable. r26997: Fix codec-specific options syntax declaration to be less confusing and wrong. r27057: Ability for specifying TV standard individually for each TV channel. r27132: Fix/restore the description of the rectangle video filter. previously applied: r27169: add missing escapes and full stops for scaletempo filter r27179: remove two trailing whitespaces
author kraymer
date Mon, 30 Jun 2008 19:35:45 +0000
parents c3eb28f300d0
children 0f1b5b68af32
line wrap: on
line source

.section .data
.globl caller_return
caller_return:
	.long 0
.globl report_entry
report_entry:
	.long null_call
.globl report_ret
report_ret:	
	.long null_call
.global wrapper_target
wrapper_target:	
	.long null_call

.section .text
.globl null_call
	.type null_call, @function
	.balign 16,0x90
null_call:
	ret
.globl wrapper
	.type wrapper, @function
	.balign 16,0x90
wrapper:
	pusha			# store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) 
	pushf			# store flags
	
	push %ebp		# set up a stack frame 
	movl %esp, %ebp

	leal 4(%ebp), %eax	# push flags addr
	push %eax
	leal 8(%ebp), %eax	# push registers addr
	push %eax
	
	leal 40(%ebp), %edx	
	movl (%ebp), %eax
	subl %edx, %eax
	push %eax
	push %edx
	
	call *report_entry	# report entry
	
	test %eax, %eax
	jnz .Ldone

	leave			# restore %esp, %ebp
	popf			# restore flags
	popa			# restore registers
	
	popl caller_return	# switch return addresses
	pushl $.Lwrapper_return 
	
	jmp *wrapper_target	# wrapper_target should return at .Lwrapper_return

	.balign 16, 0x90
.Lwrapper_return:	
	pushl caller_return	# restore the original return address
	pusha			# more for reference sake here
	pushf
	
	push %ebp		# set up a stack frame
	movl %esp, %ebp

	leal 4(%ebp), %eax	# push flags addr
	push %eax
	leal 8(%ebp), %eax	# push registers addr
	push %eax

	leal 40(%ebp), %edx	# push stack top address (relative to our entry)
	movl (%ebp), %eax
	subl %edx, %eax		# calculate difference between entry and previous frame
	push %eax
	push %edx

	call *report_ret	# report the return information (same args)
.Ldone:	

	leave
	popf
	popa
	ret