seal 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. data/.yardopts +1 -0
  2. data/LICENSE +13 -0
  3. data/README.md +265 -0
  4. data/ext/seal/extconf.rb +45 -0
  5. data/include/al/al.h +724 -0
  6. data/include/al/alc.h +277 -0
  7. data/include/al/efx-presets.h +402 -0
  8. data/include/al/efx.h +758 -0
  9. data/include/mpg123/mpg123.h +1034 -0
  10. data/include/ogg/config_types.h +25 -0
  11. data/include/ogg/ogg.h +210 -0
  12. data/include/ogg/os_types.h +147 -0
  13. data/include/seal.h +23 -0
  14. data/include/seal/buf.h +143 -0
  15. data/include/seal/core.h +95 -0
  16. data/include/seal/efs.h +112 -0
  17. data/include/seal/err.h +93 -0
  18. data/include/seal/fmt.h +58 -0
  19. data/include/seal/listener.h +103 -0
  20. data/include/seal/raw.h +86 -0
  21. data/include/seal/rvb.h +520 -0
  22. data/include/seal/src.h +413 -0
  23. data/include/seal/stream.h +81 -0
  24. data/include/vorbis/codec.h +243 -0
  25. data/include/vorbis/vorbisfile.h +206 -0
  26. data/mpg123/AUTHORS +150 -0
  27. data/mpg123/COPYING +773 -0
  28. data/mpg123/ChangeLog +3 -0
  29. data/mpg123/INSTALL +111 -0
  30. data/mpg123/Makefile.am +99 -0
  31. data/mpg123/Makefile.in +1043 -0
  32. data/mpg123/NEWS +1200 -0
  33. data/mpg123/NEWS.libmpg123 +133 -0
  34. data/mpg123/README +203 -0
  35. data/mpg123/TODO +38 -0
  36. data/mpg123/aclocal.m4 +1168 -0
  37. data/mpg123/build/config.guess +1530 -0
  38. data/mpg123/build/config.sub +1782 -0
  39. data/mpg123/build/depcomp +707 -0
  40. data/mpg123/build/install-sh +527 -0
  41. data/mpg123/build/ltmain.sh +9655 -0
  42. data/mpg123/build/missing +330 -0
  43. data/mpg123/configure +20267 -0
  44. data/mpg123/configure.ac +2178 -0
  45. data/mpg123/doc/ACCURACY +2 -0
  46. data/mpg123/doc/BENCHMARKING +110 -0
  47. data/mpg123/doc/BUGS +3 -0
  48. data/mpg123/doc/CONTACT +17 -0
  49. data/mpg123/doc/LICENSE +22 -0
  50. data/mpg123/doc/Makefile.am +32 -0
  51. data/mpg123/doc/Makefile.in +490 -0
  52. data/mpg123/doc/PATENTS +39 -0
  53. data/mpg123/doc/README.3DNOW +56 -0
  54. data/mpg123/doc/README.gain +171 -0
  55. data/mpg123/doc/README.remote +218 -0
  56. data/mpg123/doc/ROAD_TO_LGPL +270 -0
  57. data/mpg123/doc/THANKS +13 -0
  58. data/mpg123/doc/TODO +63 -0
  59. data/mpg123/doc/doxy_examples.c +21 -0
  60. data/mpg123/doc/doxygen.conf +41 -0
  61. data/mpg123/doc/doxyhead.xhtml +12 -0
  62. data/mpg123/doc/examples/dump_seekindex.c +41 -0
  63. data/mpg123/doc/examples/extract_frames.c +92 -0
  64. data/mpg123/doc/examples/feedseek.c +238 -0
  65. data/mpg123/doc/examples/id3dump.c +178 -0
  66. data/mpg123/doc/examples/mpg123_to_wav.c +118 -0
  67. data/mpg123/doc/examples/mpglib.c +92 -0
  68. data/mpg123/doc/examples/scan.c +47 -0
  69. data/mpg123/doc/libmpg123_speed.txt +84 -0
  70. data/mpg123/equalize.dat +37 -0
  71. data/mpg123/libmpg123.pc.in +11 -0
  72. data/mpg123/m4/addrconfig.m4 +34 -0
  73. data/mpg123/m4/libtool.m4 +7982 -0
  74. data/mpg123/m4/ltoptions.m4 +384 -0
  75. data/mpg123/m4/ltsugar.m4 +123 -0
  76. data/mpg123/m4/ltversion.m4 +23 -0
  77. data/mpg123/m4/lt~obsolete.m4 +98 -0
  78. data/mpg123/makedll.sh +19 -0
  79. data/mpg123/man1/mpg123.1 +512 -0
  80. data/mpg123/mpg123.spec +68 -0
  81. data/mpg123/mpg123.spec.in +68 -0
  82. data/mpg123/ports/MSVC++/2005/libmpg123/libmpg123.vcproj +741 -0
  83. data/mpg123/ports/MSVC++/2008/dump_seekindex/dump_seekindex.vcproj +194 -0
  84. data/mpg123/ports/MSVC++/2008/feedseek/feedseek.vcproj +195 -0
  85. data/mpg123/ports/MSVC++/2008/libmpg123/libmpg123.vcproj +1357 -0
  86. data/mpg123/ports/MSVC++/2008/mpg123.sln +44 -0
  87. data/mpg123/ports/MSVC++/2008/mpglib/mpglib.vcproj +191 -0
  88. data/mpg123/ports/MSVC++/2008/scan/scan.vcproj +195 -0
  89. data/mpg123/ports/MSVC++/2008clr/2008clr.sln +81 -0
  90. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Program.cs +435 -0
  91. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Properties/AssemblyInfo.cs +36 -0
  92. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/ReplaceReaderclr.csproj +72 -0
  93. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Program.cs +331 -0
  94. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Properties/AssemblyInfo.cs +36 -0
  95. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/feedseekclr.csproj +71 -0
  96. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Program.cs +79 -0
  97. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Properties/AssemblyInfo.cs +36 -0
  98. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/scanclr.csproj +70 -0
  99. data/mpg123/ports/MSVC++/2008clr/mpg123clr/AssemblyInfo.cpp +76 -0
  100. data/mpg123/ports/MSVC++/2008clr/mpg123clr/ReadMe.txt +165 -0
  101. data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.cpp +91 -0
  102. data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.h +130 -0
  103. data/mpg123/ports/MSVC++/2008clr/mpg123clr/dllmain.cpp +19 -0
  104. data/mpg123/ports/MSVC++/2008clr/mpg123clr/enum.h +218 -0
  105. data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.cpp +48 -0
  106. data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.h +134 -0
  107. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.cpp +92 -0
  108. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.h +132 -0
  109. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.cpp +138 -0
  110. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.h +152 -0
  111. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.cpp +896 -0
  112. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.h +953 -0
  113. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.rc +102 -0
  114. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.vcproj +328 -0
  115. data/mpg123/ports/MSVC++/2008clr/mpg123clr/resource.h +14 -0
  116. data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.cpp +8 -0
  117. data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.h +38 -0
  118. data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.cpp +166 -0
  119. data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.h +265 -0
  120. data/mpg123/ports/MSVC++/2008clr/mpg123clr/targetver.h +24 -0
  121. data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.cpp +67 -0
  122. data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.h +111 -0
  123. data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj +90 -0
  124. data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj.filters +6 -0
  125. data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj +95 -0
  126. data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj.filters +6 -0
  127. data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj +960 -0
  128. data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj.user +3 -0
  129. data/mpg123/ports/MSVC++/2010/libmpg123/yasm.exe +0 -0
  130. data/mpg123/ports/MSVC++/2010/mpg123.sln +38 -0
  131. data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj +93 -0
  132. data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj.filters +6 -0
  133. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/CORE_FileIn.H +15 -0
  134. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/SourceFilter_MP3.H +139 -0
  135. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_Def.H +206 -0
  136. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_FileIn.H +167 -0
  137. data/mpg123/ports/MSVC++/CMP3Stream/README +4 -0
  138. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_FileIn.CPP +462 -0
  139. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Log.CPP +122 -0
  140. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Mutex.CPP +35 -0
  141. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/SourceFilter_MP3Stream.CPP +586 -0
  142. data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/PLACE_LIBMPG123_SOURCES_HERE +0 -0
  143. data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/libMPG123.vcproj +245 -0
  144. data/mpg123/ports/MSVC++/config.h +35 -0
  145. data/mpg123/ports/MSVC++/examples/feedseek.c +240 -0
  146. data/mpg123/ports/MSVC++/examples/scan.c +47 -0
  147. data/mpg123/ports/MSVC++/mpg123.h +46 -0
  148. data/mpg123/ports/MSVC++/msvc.c +59 -0
  149. data/mpg123/ports/README +26 -0
  150. data/mpg123/ports/Sony_PSP/Makefile.psp +38 -0
  151. data/mpg123/ports/Sony_PSP/README +11 -0
  152. data/mpg123/ports/Sony_PSP/config.h +368 -0
  153. data/mpg123/ports/Sony_PSP/readers.c.patch +2 -0
  154. data/mpg123/ports/Xcode/config.h +197 -0
  155. data/mpg123/ports/Xcode/mpg123.h +17 -0
  156. data/mpg123/ports/Xcode/mpg123.xcodeproj/project.pbxproj +670 -0
  157. data/mpg123/ports/mpg123_.pas +478 -0
  158. data/mpg123/scripts/benchmark-cpu.pl +56 -0
  159. data/mpg123/scripts/tag_lyrics.py +76 -0
  160. data/mpg123/src/Makefile.am +186 -0
  161. data/mpg123/src/Makefile.in +1097 -0
  162. data/mpg123/src/audio.c +725 -0
  163. data/mpg123/src/audio.h +106 -0
  164. data/mpg123/src/buffer.c +312 -0
  165. data/mpg123/src/buffer.h +45 -0
  166. data/mpg123/src/common.c +240 -0
  167. data/mpg123/src/common.h +29 -0
  168. data/mpg123/src/config.h.in +436 -0
  169. data/mpg123/src/control_generic.c +809 -0
  170. data/mpg123/src/equalizer.c +48 -0
  171. data/mpg123/src/genre.c +271 -0
  172. data/mpg123/src/genre.h +15 -0
  173. data/mpg123/src/getlopt.c +148 -0
  174. data/mpg123/src/getlopt.h +77 -0
  175. data/mpg123/src/httpget.c +700 -0
  176. data/mpg123/src/httpget.h +66 -0
  177. data/mpg123/src/legacy_module.c +74 -0
  178. data/mpg123/src/libmpg123/Makefile.am +141 -0
  179. data/mpg123/src/libmpg123/Makefile.in +919 -0
  180. data/mpg123/src/libmpg123/compat.c +138 -0
  181. data/mpg123/src/libmpg123/compat.h +178 -0
  182. data/mpg123/src/libmpg123/dct36_3dnow.S +505 -0
  183. data/mpg123/src/libmpg123/dct36_3dnowext.S +512 -0
  184. data/mpg123/src/libmpg123/dct64.c +174 -0
  185. data/mpg123/src/libmpg123/dct64_3dnow.S +712 -0
  186. data/mpg123/src/libmpg123/dct64_3dnowext.S +714 -0
  187. data/mpg123/src/libmpg123/dct64_altivec.c +315 -0
  188. data/mpg123/src/libmpg123/dct64_i386.c +336 -0
  189. data/mpg123/src/libmpg123/dct64_i486.c +342 -0
  190. data/mpg123/src/libmpg123/dct64_mmx.S +811 -0
  191. data/mpg123/src/libmpg123/dct64_neon.S +297 -0
  192. data/mpg123/src/libmpg123/dct64_neon_float.S +270 -0
  193. data/mpg123/src/libmpg123/dct64_sse.S +454 -0
  194. data/mpg123/src/libmpg123/dct64_sse_float.S +401 -0
  195. data/mpg123/src/libmpg123/dct64_x86_64.S +464 -0
  196. data/mpg123/src/libmpg123/dct64_x86_64_float.S +426 -0
  197. data/mpg123/src/libmpg123/debug.h +171 -0
  198. data/mpg123/src/libmpg123/decode.h +268 -0
  199. data/mpg123/src/libmpg123/dither.c +119 -0
  200. data/mpg123/src/libmpg123/dither.h +23 -0
  201. data/mpg123/src/libmpg123/equalizer.c +17 -0
  202. data/mpg123/src/libmpg123/equalizer_3dnow.S +70 -0
  203. data/mpg123/src/libmpg123/feature.c +106 -0
  204. data/mpg123/src/libmpg123/format.c +521 -0
  205. data/mpg123/src/libmpg123/frame.c +1046 -0
  206. data/mpg123/src/libmpg123/frame.h +410 -0
  207. data/mpg123/src/libmpg123/gapless.h +119 -0
  208. data/mpg123/src/libmpg123/getbits.h +100 -0
  209. data/mpg123/src/libmpg123/getcpuflags.S +91 -0
  210. data/mpg123/src/libmpg123/getcpuflags.h +47 -0
  211. data/mpg123/src/libmpg123/huffman.h +340 -0
  212. data/mpg123/src/libmpg123/icy.c +32 -0
  213. data/mpg123/src/libmpg123/icy.h +38 -0
  214. data/mpg123/src/libmpg123/icy2utf8.c +438 -0
  215. data/mpg123/src/libmpg123/icy2utf8.h +10 -0
  216. data/mpg123/src/libmpg123/id3.c +999 -0
  217. data/mpg123/src/libmpg123/id3.h +43 -0
  218. data/mpg123/src/libmpg123/index.c +134 -0
  219. data/mpg123/src/libmpg123/index.h +59 -0
  220. data/mpg123/src/libmpg123/intsym.h +256 -0
  221. data/mpg123/src/libmpg123/l12_integer_tables.h +278 -0
  222. data/mpg123/src/libmpg123/l2tables.h +164 -0
  223. data/mpg123/src/libmpg123/l3_integer_tables.h +1002 -0
  224. data/mpg123/src/libmpg123/layer1.c +155 -0
  225. data/mpg123/src/libmpg123/layer2.c +371 -0
  226. data/mpg123/src/libmpg123/layer3.c +2053 -0
  227. data/mpg123/src/libmpg123/lfs_alias.c +252 -0
  228. data/mpg123/src/libmpg123/lfs_wrap.c +751 -0
  229. data/mpg123/src/libmpg123/libmpg123.c +1607 -0
  230. data/mpg123/src/libmpg123/mangle.h +74 -0
  231. data/mpg123/src/libmpg123/mpeghead.h +87 -0
  232. data/mpg123/src/libmpg123/mpg123.h.in +1075 -0
  233. data/mpg123/src/libmpg123/mpg123lib_intern.h +338 -0
  234. data/mpg123/src/libmpg123/ntom.c +148 -0
  235. data/mpg123/src/libmpg123/optimize.c +964 -0
  236. data/mpg123/src/libmpg123/optimize.h +219 -0
  237. data/mpg123/src/libmpg123/parse.c +1179 -0
  238. data/mpg123/src/libmpg123/parse.h +25 -0
  239. data/mpg123/src/libmpg123/reader.h +137 -0
  240. data/mpg123/src/libmpg123/readers.c +1235 -0
  241. data/mpg123/src/libmpg123/sample.h +152 -0
  242. data/mpg123/src/libmpg123/stringbuf.c +163 -0
  243. data/mpg123/src/libmpg123/synth.c +816 -0
  244. data/mpg123/src/libmpg123/synth.h +196 -0
  245. data/mpg123/src/libmpg123/synth_3dnow.S +318 -0
  246. data/mpg123/src/libmpg123/synth_3dnowext.S +6 -0
  247. data/mpg123/src/libmpg123/synth_8bit.c +142 -0
  248. data/mpg123/src/libmpg123/synth_8bit.h +86 -0
  249. data/mpg123/src/libmpg123/synth_altivec.c +1057 -0
  250. data/mpg123/src/libmpg123/synth_arm.S +271 -0
  251. data/mpg123/src/libmpg123/synth_arm_accurate.S +287 -0
  252. data/mpg123/src/libmpg123/synth_i486.c +252 -0
  253. data/mpg123/src/libmpg123/synth_i586.S +336 -0
  254. data/mpg123/src/libmpg123/synth_i586_dither.S +375 -0
  255. data/mpg123/src/libmpg123/synth_mmx.S +125 -0
  256. data/mpg123/src/libmpg123/synth_mono.h +64 -0
  257. data/mpg123/src/libmpg123/synth_neon.S +123 -0
  258. data/mpg123/src/libmpg123/synth_neon_accurate.S +173 -0
  259. data/mpg123/src/libmpg123/synth_neon_float.S +149 -0
  260. data/mpg123/src/libmpg123/synth_neon_s32.S +168 -0
  261. data/mpg123/src/libmpg123/synth_ntom.h +213 -0
  262. data/mpg123/src/libmpg123/synth_real.c +404 -0
  263. data/mpg123/src/libmpg123/synth_s32.c +411 -0
  264. data/mpg123/src/libmpg123/synth_sse.S +6 -0
  265. data/mpg123/src/libmpg123/synth_sse3d.h +246 -0
  266. data/mpg123/src/libmpg123/synth_sse_accurate.S +294 -0
  267. data/mpg123/src/libmpg123/synth_sse_float.S +241 -0
  268. data/mpg123/src/libmpg123/synth_sse_s32.S +306 -0
  269. data/mpg123/src/libmpg123/synth_stereo_neon.S +175 -0
  270. data/mpg123/src/libmpg123/synth_stereo_neon_accurate.S +262 -0
  271. data/mpg123/src/libmpg123/synth_stereo_neon_float.S +220 -0
  272. data/mpg123/src/libmpg123/synth_stereo_neon_s32.S +247 -0
  273. data/mpg123/src/libmpg123/synth_stereo_sse_accurate.S +508 -0
  274. data/mpg123/src/libmpg123/synth_stereo_sse_float.S +416 -0
  275. data/mpg123/src/libmpg123/synth_stereo_sse_s32.S +540 -0
  276. data/mpg123/src/libmpg123/synth_stereo_x86_64.S +335 -0
  277. data/mpg123/src/libmpg123/synth_stereo_x86_64_accurate.S +454 -0
  278. data/mpg123/src/libmpg123/synth_stereo_x86_64_float.S +396 -0
  279. data/mpg123/src/libmpg123/synth_stereo_x86_64_s32.S +473 -0
  280. data/mpg123/src/libmpg123/synth_x86_64.S +244 -0
  281. data/mpg123/src/libmpg123/synth_x86_64_accurate.S +301 -0
  282. data/mpg123/src/libmpg123/synth_x86_64_float.S +259 -0
  283. data/mpg123/src/libmpg123/synth_x86_64_s32.S +312 -0
  284. data/mpg123/src/libmpg123/synths.h +52 -0
  285. data/mpg123/src/libmpg123/tabinit.c +294 -0
  286. data/mpg123/src/libmpg123/tabinit_mmx.S +210 -0
  287. data/mpg123/src/libmpg123/testcpu.c +35 -0
  288. data/mpg123/src/libmpg123/true.h +14 -0
  289. data/mpg123/src/local.c +63 -0
  290. data/mpg123/src/local.h +21 -0
  291. data/mpg123/src/metaprint.c +373 -0
  292. data/mpg123/src/metaprint.h +17 -0
  293. data/mpg123/src/module.c +306 -0
  294. data/mpg123/src/module.h +48 -0
  295. data/mpg123/src/mpg123.c +1405 -0
  296. data/mpg123/src/mpg123app.h +171 -0
  297. data/mpg123/src/output/Makefile.am +213 -0
  298. data/mpg123/src/output/Makefile.in +1238 -0
  299. data/mpg123/src/output/aix.c +300 -0
  300. data/mpg123/src/output/alib.c +209 -0
  301. data/mpg123/src/output/alsa.c +297 -0
  302. data/mpg123/src/output/arts.c +117 -0
  303. data/mpg123/src/output/coreaudio.c +370 -0
  304. data/mpg123/src/output/dummy.c +78 -0
  305. data/mpg123/src/output/esd.c +167 -0
  306. data/mpg123/src/output/hp.c +184 -0
  307. data/mpg123/src/output/jack.c +450 -0
  308. data/mpg123/src/output/mint.c +197 -0
  309. data/mpg123/src/output/nas.c +335 -0
  310. data/mpg123/src/output/openal.c +197 -0
  311. data/mpg123/src/output/os2.c +665 -0
  312. data/mpg123/src/output/oss.c +319 -0
  313. data/mpg123/src/output/portaudio.c +255 -0
  314. data/mpg123/src/output/pulse.c +164 -0
  315. data/mpg123/src/output/sdl.c +206 -0
  316. data/mpg123/src/output/sgi.c +213 -0
  317. data/mpg123/src/output/sndio.c +161 -0
  318. data/mpg123/src/output/sun.c +281 -0
  319. data/mpg123/src/output/win32.c +229 -0
  320. data/mpg123/src/playlist.c +596 -0
  321. data/mpg123/src/playlist.h +52 -0
  322. data/mpg123/src/resolver.c +319 -0
  323. data/mpg123/src/resolver.h +25 -0
  324. data/mpg123/src/sfifo.c +146 -0
  325. data/mpg123/src/sfifo.h +95 -0
  326. data/mpg123/src/streamdump.c +74 -0
  327. data/mpg123/src/streamdump.h +20 -0
  328. data/mpg123/src/term.c +479 -0
  329. data/mpg123/src/term.h +81 -0
  330. data/mpg123/src/tests/noise.c +52 -0
  331. data/mpg123/src/tests/plain_id3.c +109 -0
  332. data/mpg123/src/tests/seek_accuracy.c +261 -0
  333. data/mpg123/src/tests/seek_whence.c +56 -0
  334. data/mpg123/src/tests/testtext.h +34 -0
  335. data/mpg123/src/tests/text.c +80 -0
  336. data/mpg123/src/wav.c +464 -0
  337. data/mpg123/src/wavhead.h +68 -0
  338. data/mpg123/src/win32_net.c +599 -0
  339. data/mpg123/src/win32_support.c +191 -0
  340. data/mpg123/src/win32_support.h +152 -0
  341. data/mpg123/src/xfermem.c +321 -0
  342. data/mpg123/src/xfermem.h +74 -0
  343. data/mpg123/windows-builds.sh +137 -0
  344. data/msvc/lib/OpenAL32.lib +0 -0
  345. data/spec/fixtures/heal.ogg +0 -0
  346. data/spec/fixtures/tone_up.wav +0 -0
  347. data/spec/seal/buffer_spec.rb +37 -0
  348. data/spec/seal/core_spec.rb +29 -0
  349. data/spec/seal/effect_slot_spec.rb +38 -0
  350. data/spec/seal/listener_spec.rb +33 -0
  351. data/spec/seal/reverb_spec.rb +51 -0
  352. data/spec/seal/source_spec.rb +370 -0
  353. data/spec/seal/stream_spec.rb +38 -0
  354. data/spec/spec_helper.rb +45 -0
  355. data/spec/support/attribute_examples.rb +75 -0
  356. data/spec/support/audio_object_with_format.rb +27 -0
  357. data/spec/support/movable_object.rb +22 -0
  358. data/src/libogg/bitwise.c +857 -0
  359. data/src/libogg/framing.c +2093 -0
  360. data/src/libvorbis/backends.h +144 -0
  361. data/src/libvorbis/bitrate.c +253 -0
  362. data/src/libvorbis/bitrate.h +59 -0
  363. data/src/libvorbis/block.c +1046 -0
  364. data/src/libvorbis/codebook.c +484 -0
  365. data/src/libvorbis/codebook.h +119 -0
  366. data/src/libvorbis/codec_internal.h +167 -0
  367. data/src/libvorbis/envelope.c +375 -0
  368. data/src/libvorbis/envelope.h +80 -0
  369. data/src/libvorbis/floor0.c +221 -0
  370. data/src/libvorbis/floor1.c +1100 -0
  371. data/src/libvorbis/highlevel.h +58 -0
  372. data/src/libvorbis/info.c +668 -0
  373. data/src/libvorbis/lookup.c +94 -0
  374. data/src/libvorbis/lookup.h +32 -0
  375. data/src/libvorbis/lookup_data.h +192 -0
  376. data/src/libvorbis/lpc.c +160 -0
  377. data/src/libvorbis/lpc.h +29 -0
  378. data/src/libvorbis/lsp.c +456 -0
  379. data/src/libvorbis/lsp.h +28 -0
  380. data/src/libvorbis/mapping0.c +816 -0
  381. data/src/libvorbis/masking.h +785 -0
  382. data/src/libvorbis/mdct.c +563 -0
  383. data/src/libvorbis/mdct.h +71 -0
  384. data/src/libvorbis/misc.h +57 -0
  385. data/src/libvorbis/os.h +186 -0
  386. data/src/libvorbis/psy.c +1206 -0
  387. data/src/libvorbis/psy.h +154 -0
  388. data/src/libvorbis/registry.c +45 -0
  389. data/src/libvorbis/registry.h +32 -0
  390. data/src/libvorbis/res0.c +889 -0
  391. data/src/libvorbis/scales.h +90 -0
  392. data/src/libvorbis/sharedbook.c +579 -0
  393. data/src/libvorbis/smallft.c +1255 -0
  394. data/src/libvorbis/smallft.h +34 -0
  395. data/src/libvorbis/synthesis.c +184 -0
  396. data/src/libvorbis/vorbisfile.c +2337 -0
  397. data/src/libvorbis/window.c +2135 -0
  398. data/src/libvorbis/window.h +26 -0
  399. data/src/rubyext.c +2329 -0
  400. data/src/seal/buf.c +124 -0
  401. data/src/seal/core.c +283 -0
  402. data/src/seal/efs.c +74 -0
  403. data/src/seal/err.c +118 -0
  404. data/src/seal/fmt.c +86 -0
  405. data/src/seal/listener.c +111 -0
  406. data/src/seal/mpg.c +174 -0
  407. data/src/seal/mpg.h +24 -0
  408. data/src/seal/ov.c +180 -0
  409. data/src/seal/ov.h +22 -0
  410. data/src/seal/raw.c +59 -0
  411. data/src/seal/reader.c +102 -0
  412. data/src/seal/reader.h +59 -0
  413. data/src/seal/rvb.c +368 -0
  414. data/src/seal/src.c +654 -0
  415. data/src/seal/stream.c +109 -0
  416. data/src/seal/threading.c +66 -0
  417. data/src/seal/threading.h +20 -0
  418. data/src/seal/wav.c +297 -0
  419. data/src/seal/wav.h +23 -0
  420. data/src/win32api.rb +29 -0
  421. metadata +563 -0
@@ -0,0 +1,375 @@
1
+ /*
2
+ decode_i586_dither: asm synth with dither noise
3
+
4
+ copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
5
+ see COPYING and AUTHORS files in distribution or http://mpg123.org
6
+ initially written by Stefan Bieschewski as decode_i586.s without dither
7
+
8
+ This version uses "circular" 64k dither noise.
9
+ (Patch by Adrian <adrian.bacon@xs4all.nl>)
10
+
11
+ Thomas learned something about assembler and the stack while making this one thread safe (removing static data).
12
+ */
13
+
14
+ #include "mangle.h"
15
+
16
+ .data
17
+ #ifndef __APPLE__
18
+ .section .rodata
19
+ #endif
20
+ ALIGN8
21
+ .LC0:
22
+ .long 0x0,0x40dfffc0
23
+ ALIGN8
24
+ .LC1:
25
+ .long 0x0,0xc0e00000
26
+ ALIGN8
27
+ .text
28
+ /* int synth_1to1_i586_asm_dither(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int bo_and_ditherindex[2], real *decwin, real* dithernoise); */
29
+ .globl ASM_NAME(synth_1to1_i586_asm_dither)
30
+ ASM_NAME(synth_1to1_i586_asm_dither):
31
+ subl $16,%esp
32
+ pushl %ebp
33
+ pushl %edi
34
+ pushl %esi
35
+ pushl %ebx
36
+ /* stack: 0(%esp)=%ebx 4=esi 8=edi 12=ebp 16,20,24,28=local 32=back 36=bandptr 40=channel 44=out 48=buffs 52=bo 56=decwin 60=dithernoise */
37
+ #define BANDPTR 36(%esp)
38
+ #define CHANNEL 40(%esp)
39
+ #define OUT 44(%esp)
40
+ #define BUFFS 48(%esp)
41
+ #define BO 52(%esp)
42
+ #define DECWIN 56(%esp)
43
+ #define DITHERNOISE 60(%esp)
44
+ /*#define DITHERNOISE $(ASM_NAME(dithernoise))*/
45
+ #define LOC0 16(%esp)
46
+ #define LOC1 20(%esp)
47
+ #define LOC2 24(%esp)
48
+ #define DITHERINDEX 28(%esp)
49
+ /* During application of the dithering, we need the shifted locations because there's an additional value on the stack. */
50
+ #define DITHERNOISE2 64(%esp)
51
+ #define DITHERINDEX2 32(%esp)
52
+
53
+ movl BANDPTR,%eax
54
+ movl OUT,%esi
55
+ movl BO, %ebx
56
+ movl (%ebx),%ebp /* get bo value */
57
+ movl 4(%ebx),%edi; /* get the ditherindex behind bo */
58
+ movl %edi,DITHERINDEX
59
+ xorl %edi,%edi
60
+ cmpl %edi,CHANNEL
61
+ jne .L48
62
+ decl %ebp
63
+ andl $15,%ebp
64
+ movl %ebp,(%ebx) /* save bo back */
65
+ movl BUFFS,%ecx
66
+ jmp .L49
67
+ .L48:
68
+ /* In stereo mode , "rewind" dither pointer 32 samples , so 2nd channel */
69
+ /* has same dither values. Tested OK for mono and stereo MP2 and MP3 */
70
+ subl $128,DITHERINDEX /* better move to %edi for the two calculations? */
71
+ andl $0x0003fffc,DITHERINDEX
72
+ addl $2,%esi
73
+ movl BUFFS,%ecx
74
+ addl $2176,%ecx
75
+ .L49:
76
+ /* now the call of dct64 is prepared, stuff pushed to the stack, but soon after it's removed again */
77
+ testl $1,%ebp
78
+ je .L50
79
+ movl %ecx,%ebx
80
+ movl %ebp,LOC0
81
+ pushl %eax
82
+ movl LOC1,%edx
83
+ leal (%ebx,%edx,4),%eax
84
+ pushl %eax
85
+ movl LOC2,%eax
86
+ incl %eax
87
+ andl $15,%eax
88
+ leal 1088(,%eax,4),%eax
89
+ addl %ebx,%eax
90
+ jmp .L74
91
+ .L50:
92
+ leal 1088(%ecx),%ebx
93
+ leal 1(%ebp),%edx
94
+ movl %edx,LOC0
95
+ pushl %eax
96
+ leal 1092(%ecx,%ebp,4),%eax
97
+ pushl %eax
98
+ leal (%ecx,%ebp,4),%eax
99
+ .L74:
100
+ pushl %eax
101
+ call ASM_NAME(dct64_i386)
102
+ addl $12,%esp
103
+ /* Now removed the parameters.
104
+ stack: 0(%esp)=%ebx 4=esi 8=edi 12=ebp 16,20,24,28=local 32=back 36=bandptr 40=channel 44=out 48=buffs 52=bo 56=decwin 60=dithernoise */
105
+ movl LOC0,%edx
106
+ leal 0(,%edx,4),%edx
107
+ /* movl ASM_VALUE(decwin)+64,%eax */
108
+ movl DECWIN,%eax
109
+ addl $64,%eax
110
+ movl %eax,%ecx
111
+ subl %edx,%ecx
112
+ movl $16,%ebp
113
+ .L55:
114
+ flds (%ecx)
115
+ fmuls (%ebx)
116
+ flds 4(%ecx)
117
+ fmuls 4(%ebx)
118
+ fxch %st(1)
119
+ flds 8(%ecx)
120
+ fmuls 8(%ebx)
121
+ fxch %st(2)
122
+ fsubrp %st,%st(1)
123
+ flds 12(%ecx)
124
+ fmuls 12(%ebx)
125
+ fxch %st(2)
126
+ faddp %st,%st(1)
127
+ flds 16(%ecx)
128
+ fmuls 16(%ebx)
129
+ fxch %st(2)
130
+ fsubrp %st,%st(1)
131
+ flds 20(%ecx)
132
+ fmuls 20(%ebx)
133
+ fxch %st(2)
134
+ faddp %st,%st(1)
135
+ flds 24(%ecx)
136
+ fmuls 24(%ebx)
137
+ fxch %st(2)
138
+ fsubrp %st,%st(1)
139
+ flds 28(%ecx)
140
+ fmuls 28(%ebx)
141
+ fxch %st(2)
142
+ faddp %st,%st(1)
143
+ flds 32(%ecx)
144
+ fmuls 32(%ebx)
145
+ fxch %st(2)
146
+ fsubrp %st,%st(1)
147
+ flds 36(%ecx)
148
+ fmuls 36(%ebx)
149
+ fxch %st(2)
150
+ faddp %st,%st(1)
151
+ flds 40(%ecx)
152
+ fmuls 40(%ebx)
153
+ fxch %st(2)
154
+ fsubrp %st,%st(1)
155
+ flds 44(%ecx)
156
+ fmuls 44(%ebx)
157
+ fxch %st(2)
158
+ faddp %st,%st(1)
159
+ flds 48(%ecx)
160
+ fmuls 48(%ebx)
161
+ fxch %st(2)
162
+ fsubrp %st,%st(1)
163
+ flds 52(%ecx)
164
+ fmuls 52(%ebx)
165
+ fxch %st(2)
166
+ faddp %st,%st(1)
167
+ flds 56(%ecx)
168
+ fmuls 56(%ebx)
169
+ fxch %st(2)
170
+ fsubrp %st,%st(1)
171
+ flds 60(%ecx)
172
+ fmuls 60(%ebx)
173
+ fxch %st(2)
174
+ subl $4,%esp
175
+ faddp %st,%st(1)
176
+ fxch %st(1)
177
+ fsubrp %st,%st(1)
178
+
179
+ addl $4,DITHERINDEX2
180
+ andl $0x0003fffc,DITHERINDEX2
181
+ movl DITHERNOISE2,%edi
182
+ addl DITHERINDEX2,%edi
183
+
184
+ fadds (%edi)
185
+
186
+ /* fistpl and popl as a unit keep the stack unchanged */
187
+ fistpl (%esp)
188
+ popl %eax
189
+ cmpl $32767,%eax
190
+ jg 1f
191
+ cmpl $-32768,%eax
192
+ jl 2f
193
+ movw %ax,(%esi)
194
+ jmp 4f
195
+ 1: movw $32767,(%esi)
196
+ jmp 3f
197
+ 2: movw $-32768,(%esi)
198
+ 3:
199
+ /* incl %edi */
200
+ 4:
201
+ .L54:
202
+ addl $64,%ebx
203
+ subl $-128,%ecx
204
+ addl $4,%esi
205
+ decl %ebp
206
+ jnz .L55
207
+ flds (%ecx)
208
+ fmuls (%ebx)
209
+ flds 8(%ecx)
210
+ fmuls 8(%ebx)
211
+ flds 16(%ecx)
212
+ fmuls 16(%ebx)
213
+ fxch %st(2)
214
+ faddp %st,%st(1)
215
+ flds 24(%ecx)
216
+ fmuls 24(%ebx)
217
+ fxch %st(2)
218
+ faddp %st,%st(1)
219
+ flds 32(%ecx)
220
+ fmuls 32(%ebx)
221
+ fxch %st(2)
222
+ faddp %st,%st(1)
223
+ flds 40(%ecx)
224
+ fmuls 40(%ebx)
225
+ fxch %st(2)
226
+ faddp %st,%st(1)
227
+ flds 48(%ecx)
228
+ fmuls 48(%ebx)
229
+ fxch %st(2)
230
+ faddp %st,%st(1)
231
+ flds 56(%ecx)
232
+ fmuls 56(%ebx)
233
+ fxch %st(2)
234
+ subl $4,%esp
235
+ faddp %st,%st(1)
236
+ fxch %st(1)
237
+ faddp %st,%st(1)
238
+
239
+ addl $4,DITHERINDEX2
240
+ andl $0x0003fffc,DITHERINDEX2
241
+ movl DITHERNOISE2,%edi
242
+ addl DITHERINDEX2,%edi
243
+
244
+ fadds (%edi)
245
+ /* fistpl and popl as a unit keep the stack unchanged */
246
+ fistpl (%esp)
247
+ popl %eax
248
+ cmpl $32767,%eax
249
+ jg 1f
250
+ cmpl $-32768,%eax
251
+ jl 2f
252
+ movw %ax,(%esi)
253
+ jmp 4f
254
+ 1: movw $32767,(%esi)
255
+ jmp 3f
256
+ 2: movw $-32768,(%esi)
257
+ 3:
258
+ /* incl %edi */
259
+ 4:
260
+ .L62:
261
+ addl $-64,%ebx
262
+ addl $4,%esi
263
+ movl LOC0,%edx
264
+ leal -128(%ecx,%edx,8),%ecx
265
+ movl $15,%ebp
266
+ .L68:
267
+ flds -4(%ecx)
268
+ fchs
269
+ fmuls (%ebx)
270
+ flds -8(%ecx)
271
+ fmuls 4(%ebx)
272
+ fxch %st(1)
273
+ flds -12(%ecx)
274
+ fmuls 8(%ebx)
275
+ fxch %st(2)
276
+ fsubrp %st,%st(1)
277
+ flds -16(%ecx)
278
+ fmuls 12(%ebx)
279
+ fxch %st(2)
280
+ fsubrp %st,%st(1)
281
+ flds -20(%ecx)
282
+ fmuls 16(%ebx)
283
+ fxch %st(2)
284
+ fsubrp %st,%st(1)
285
+ flds -24(%ecx)
286
+ fmuls 20(%ebx)
287
+ fxch %st(2)
288
+ fsubrp %st,%st(1)
289
+ flds -28(%ecx)
290
+ fmuls 24(%ebx)
291
+ fxch %st(2)
292
+ fsubrp %st,%st(1)
293
+ flds -32(%ecx)
294
+ fmuls 28(%ebx)
295
+ fxch %st(2)
296
+ fsubrp %st,%st(1)
297
+ flds -36(%ecx)
298
+ fmuls 32(%ebx)
299
+ fxch %st(2)
300
+ fsubrp %st,%st(1)
301
+ flds -40(%ecx)
302
+ fmuls 36(%ebx)
303
+ fxch %st(2)
304
+ fsubrp %st,%st(1)
305
+ flds -44(%ecx)
306
+ fmuls 40(%ebx)
307
+ fxch %st(2)
308
+ fsubrp %st,%st(1)
309
+ flds -48(%ecx)
310
+ fmuls 44(%ebx)
311
+ fxch %st(2)
312
+ fsubrp %st,%st(1)
313
+ flds -52(%ecx)
314
+ fmuls 48(%ebx)
315
+ fxch %st(2)
316
+ fsubrp %st,%st(1)
317
+ flds -56(%ecx)
318
+ fmuls 52(%ebx)
319
+ fxch %st(2)
320
+ fsubrp %st,%st(1)
321
+ flds -60(%ecx)
322
+ fmuls 56(%ebx)
323
+ fxch %st(2)
324
+ fsubrp %st,%st(1)
325
+ flds (%ecx)
326
+ fmuls 60(%ebx)
327
+ fxch %st(2)
328
+ subl $4,%esp
329
+ fsubrp %st,%st(1)
330
+ fxch %st(1)
331
+ fsubrp %st,%st(1)
332
+
333
+ addl $4,DITHERINDEX2
334
+ andl $0x0003fffc,DITHERINDEX2
335
+ movl DITHERNOISE2,%edi
336
+ addl DITHERINDEX2,%edi
337
+
338
+ fadds (%edi)
339
+ /* fistpl and popl as a unit keep the stack unchanged */
340
+ fistpl (%esp)
341
+ popl %eax
342
+ cmpl $32767,%eax
343
+ jg 1f
344
+ cmpl $-32768,%eax
345
+ jl 2f
346
+ movw %ax,(%esi)
347
+ jmp 4f
348
+ 1: movw $32767,(%esi)
349
+ jmp 3f
350
+ 2: movw $-32768,(%esi)
351
+ 3:
352
+ /* incl %edi */
353
+ 4:
354
+ .L67:
355
+ addl $-64,%ebx
356
+ addl $-128,%ecx
357
+ addl $4,%esi
358
+ decl %ebp
359
+ jnz .L68
360
+ /* return ipv edi 0 in eax */
361
+ movl $0,%eax
362
+ /* save ditherindex */
363
+ movl BO,%ebx
364
+ movl DITHERINDEX,%esi
365
+ movl %esi,4(%ebx);
366
+ /* stack: 0=ebx 4=esi 8=edi 12=ebp 16,20,24,28=local 32=back 36=bandptr 40=channel 44=out 48=buffs 52=bo */
367
+ popl %ebx
368
+ popl %esi
369
+ popl %edi
370
+ popl %ebp
371
+ addl $16,%esp
372
+ /* The stack must be now: 0=back 4=bandptr 8=channel 12=out 16=buffs 20=bo */
373
+ ret
374
+
375
+ NONEXEC_STACK
@@ -0,0 +1,125 @@
1
+ /*
2
+ decode_MMX.s: MMX optimized synth
3
+
4
+ copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
5
+ see COPYING and AUTHORS files in distribution or http://mpg123.org
6
+ initially written by the mysterious higway (apparently)
7
+
8
+ Thomas' words about a note:
9
+ Initially, I found the note "this code comes under GPL" in this file.
10
+ After asking Michael about legal status of the MMX files, he said that he got them without any comment and thus I believe that the GPL comment was made by Michael, since he made mpg123 GPL at some time - and marked some files that way, but not all.
11
+ Based on that thought, I now consider this file along with the other parts of higway's MMX optimization to be licensed under LGPL 2.1 by Michael's decision.
12
+ */
13
+
14
+ #include "mangle.h"
15
+
16
+ .text
17
+
18
+ .globl ASM_NAME(synth_1to1_MMX)
19
+ /* int synth_1to1_MMX(real *bandPtr, int channel, short *out, short *buffs, int *bo, float *decwins); */
20
+ ASM_NAME(synth_1to1_MMX):
21
+ pushl %ebp
22
+ pushl %edi
23
+ pushl %esi
24
+ pushl %ebx
25
+ /* stack: 0=ebx, 4=esi, 8=edi, 12=ebp, 16=back, 20=bandPtr, 24=channel, 28=out, 32=buffs, 36=bo, 40=decwins */
26
+ movl 24(%esp),%ecx
27
+ movl 28(%esp),%edi
28
+ movl $15,%ebx
29
+ movl 36(%esp),%edx
30
+ leal (%edi,%ecx,2),%edi
31
+ decl %ecx
32
+ movl 32(%esp),%esi
33
+ movl (%edx),%eax
34
+ jecxz .L1
35
+ decl %eax
36
+ andl %ebx,%eax
37
+ leal 1088(%esi),%esi
38
+ movl %eax,(%edx)
39
+ .L1:
40
+ leal (%esi,%eax,2),%edx
41
+ movl %eax,%ebp
42
+ incl %eax
43
+ pushl 20(%esp)
44
+ andl %ebx,%eax
45
+ leal 544(%esi,%eax,2),%ecx
46
+ incl %ebx
47
+ testl $1, %eax
48
+ jnz .L2
49
+ xchgl %edx,%ecx
50
+ incl %ebp
51
+ leal 544(%esi),%esi
52
+ .L2:
53
+ pushl %edx
54
+ pushl %ecx
55
+ call ASM_NAME(dct64_MMX)
56
+ addl $12,%esp
57
+ /* stack like before, pushed 3, incremented again */
58
+ leal 1(%ebx), %ecx
59
+ subl %ebp,%ebx
60
+ pushl %eax
61
+ movl 44(%esp),%eax /* decwins */
62
+ leal (%eax,%ebx,2), %edx
63
+ popl %eax
64
+ .L3:
65
+ movq (%edx),%mm0
66
+ pmaddwd (%esi),%mm0
67
+ movq 8(%edx),%mm1
68
+ pmaddwd 8(%esi),%mm1
69
+ movq 16(%edx),%mm2
70
+ pmaddwd 16(%esi),%mm2
71
+ movq 24(%edx),%mm3
72
+ pmaddwd 24(%esi),%mm3
73
+ paddd %mm1,%mm0
74
+ paddd %mm2,%mm0
75
+ paddd %mm3,%mm0
76
+ movq %mm0,%mm1
77
+ psrlq $32,%mm1
78
+ paddd %mm1,%mm0
79
+ psrad $13,%mm0
80
+ packssdw %mm0,%mm0
81
+ movd %mm0,%eax
82
+ movw %ax, (%edi)
83
+
84
+ leal 32(%esi),%esi
85
+ leal 64(%edx),%edx
86
+ leal 4(%edi),%edi
87
+ loop .L3
88
+
89
+
90
+ subl $64,%esi
91
+ movl $15,%ecx
92
+ .L4:
93
+ movq (%edx),%mm0
94
+ pmaddwd (%esi),%mm0
95
+ movq 8(%edx),%mm1
96
+ pmaddwd 8(%esi),%mm1
97
+ movq 16(%edx),%mm2
98
+ pmaddwd 16(%esi),%mm2
99
+ movq 24(%edx),%mm3
100
+ pmaddwd 24(%esi),%mm3
101
+ paddd %mm1,%mm0
102
+ paddd %mm2,%mm0
103
+ paddd %mm3,%mm0
104
+ movq %mm0,%mm1
105
+ psrlq $32,%mm1
106
+ paddd %mm0,%mm1
107
+ psrad $13,%mm1
108
+ packssdw %mm1,%mm1
109
+ psubd %mm0,%mm0
110
+ psubsw %mm1,%mm0
111
+ movd %mm0,%eax
112
+ movw %ax,(%edi)
113
+
114
+ subl $32,%esi
115
+ addl $64,%edx
116
+ leal 4(%edi),%edi
117
+ loop .L4
118
+ emms
119
+ popl %ebx
120
+ popl %esi
121
+ popl %edi
122
+ popl %ebp
123
+ ret
124
+
125
+ NONEXEC_STACK