Mercurial > mplayer.hg
annotate loader/wrapper.S @ 30543:ee0b9c3bbf29
Add support for decoding 4:2:2 and 4:4:4 Theora files.
Patch by Giorgio Vazzana [mywing81 gmail com]
author | reimar |
---|---|
date | Sun, 14 Feb 2010 15:39:52 +0000 |
parents | 9ccf3bea4cf1 |
children | 32725ca88fed |
rev | line source |
---|---|
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
1 #include "config.h" |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
2 |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
3 #define GLUE(a, b) a ## b |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
4 #define JOIN(a, b) GLUE(a, b) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
5 #define MANGLE(s) JOIN(EXTERN_ASM, s) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
6 |
30469
6dd1ae2298f3
Remove '.section' causing the following assembler error on OS/2.
komh
parents:
29263
diff
changeset
|
7 .data |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
8 .globl MANGLE(caller_return) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
9 MANGLE(caller_return): |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
10 .long 0 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
11 .globl MANGLE(report_entry) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
12 MANGLE(report_entry): |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
13 .long MANGLE(null_call) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
14 .globl MANGLE(report_ret) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
15 MANGLE(report_ret): |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
16 .long MANGLE(null_call) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
17 .global MANGLE(wrapper_target) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
18 MANGLE(wrapper_target): |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
19 .long MANGLE(null_call) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
20 |
30469
6dd1ae2298f3
Remove '.section' causing the following assembler error on OS/2.
komh
parents:
29263
diff
changeset
|
21 .text |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
22 .globl MANGLE(null_call) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
23 .type MANGLE(null_call), @function |
8287 | 24 .balign 16,0x90 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
25 MANGLE(null_call): |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
26 ret |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
27 .globl MANGLE(wrapper) |
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
28 .type MANGLE(wrapper), @function |
8287 | 29 .balign 16,0x90 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
30 MANGLE(wrapper): |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
31 pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
32 pushf # store flags |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
33 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
34 push %ebp # set up a stack frame |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
35 movl %esp, %ebp |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
36 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
37 leal 4(%ebp), %eax # push flags addr |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
38 push %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
39 leal 8(%ebp), %eax # push registers addr |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
40 push %eax |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
41 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
42 leal 40(%ebp), %edx |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
43 movl (%ebp), %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
44 subl %edx, %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
45 push %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
46 push %edx |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
47 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
48 call *MANGLE(report_entry) # report entry |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
49 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
50 test %eax, %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
51 jnz .Ldone |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
52 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
53 leave # restore %esp, %ebp |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
54 popf # restore flags |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
55 popa # restore registers |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
56 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
57 popl MANGLE(caller_return) # switch return addresses |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
58 pushl $.Lwrapper_return |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
59 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
60 jmp *MANGLE(wrapper_target) # wrapper_target should return at .Lwrapper_return |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
61 |
8287 | 62 .balign 16, 0x90 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
63 .Lwrapper_return: |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
64 pushl MANGLE(caller_return) # restore the original return address |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
65 pusha # more for reference sake here |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
66 pushf |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
67 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
68 push %ebp # set up a stack frame |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
69 movl %esp, %ebp |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
70 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
71 leal 4(%ebp), %eax # push flags addr |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
72 push %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
73 leal 8(%ebp), %eax # push registers addr |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
74 push %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
75 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
76 leal 40(%ebp), %edx # push stack top address (relative to our entry) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
77 movl (%ebp), %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
78 subl %edx, %eax # calculate difference between entry and previous frame |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
79 push %eax |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
80 push %edx |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
81 |
30470
9ccf3bea4cf1
Prefix EXTERN_ASM to global variables to match them to an extern prefix of C.
komh
parents:
30469
diff
changeset
|
82 call *MANGLE(report_ret) # report the return information (same args) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
83 .Ldone: |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
84 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
85 leave |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
86 popf |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
87 popa |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
diff
changeset
|
88 ret |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
8287
diff
changeset
|
89 |