/gamesrc/external/openal/linux/src/mixaudio16.c

https://bitbucket.org/nathan_young/demx · C · 2640 lines · 2268 code · 339 blank · 33 comment · 143 complexity · 17c25436c51f7f6a87c76d60b0b98fdb MD5 · raw file

  1. /* -*- mode: C; tab-width:8; c-basic-offset:8 -*-
  2. * vi:set ts=8:
  3. *
  4. * mixaudio16.c
  5. *
  6. * Where the mixing gets done. Don't enable MMX, it needs work.
  7. */
  8. #include "al_siteconfig.h"
  9. #include "al_debug.h"
  10. #include "al_main.h"
  11. #include "al_types.h"
  12. #include "mixaudio16.h"
  13. #include <AL/altypes.h>
  14. #ifdef MMX_SUPPORT
  15. extern void mix16_1( ALshort *dst, ALshort *src, int len );
  16. extern void mix16_2( ALshort *dst, ALshort **src, int len );
  17. extern void mix16_3( ALshort *dst, ALshort **src, int len );
  18. extern void mix16_4( ALshort *dst, ALshort **src, int len );
  19. extern void mix16_5( ALshort *dst, ALshort **src, int len );
  20. extern void mix16_6( ALshort *dst, ALshort **src, int len );
  21. extern void mix16_7( ALshort *dst, ALshort **src, int len );
  22. #endif
  23. /*
  24. * MixAudio16( ALshort *dst, ALshort *src, int len )
  25. *
  26. * Mix src[0..len/2-1] into dst[0..len/2-1], clamping above by max_audioval
  27. * and below by min_audioval to prevent overflow.
  28. */
  29. void MixAudio16(ALshort *dst, ALshort *src, int len) {
  30. #ifdef MMX_SUPPORT
  31. mix16_1( dst, src, len / 2 );
  32. #else
  33. int sample;
  34. len /= sizeof(ALshort); /* len is in bytes */
  35. while(len--) {
  36. sample = *dst + *src;
  37. if( sample < min_audioval ) {
  38. *dst = min_audioval;
  39. } else if( sample > max_audioval ) {
  40. *dst = max_audioval;
  41. } else {
  42. *dst = sample;
  43. }
  44. src++;
  45. dst++;
  46. }
  47. #endif
  48. return;
  49. }
  50. /*
  51. * MixAudio16_n( ALshort *dst, alMixEntry *entries, ALuint numents );
  52. *
  53. * Mix a numents number of streams into dst, clamping above by max_audioval
  54. * and below by min_audioval to prevent overflow.
  55. *
  56. * FIXME: could be optimized to bisect the data until an "optimized"
  57. * MixAudio func could be used on it.
  58. */
  59. void MixAudio16_n( ALshort *dst, alMixEntry *entries, ALuint numents ) {
  60. int sample;
  61. ALuint i;
  62. int si; /* source iterator */
  63. int len;
  64. len = entries[0].bytes; /* sure hope all the same */
  65. len /= sizeof(ALshort); /* len is in bytes */
  66. si = 0;
  67. while(len--) {
  68. sample = *dst;
  69. for(i = 0; i < numents; i++) {
  70. sample += ((ALshort *) entries[i].data)[si];
  71. }
  72. if(sample > max_audioval ) {
  73. *dst = max_audioval;
  74. } else if(sample < min_audioval ) {
  75. *dst = min_audioval;
  76. } else {
  77. *dst = sample;
  78. }
  79. dst++;
  80. si++;
  81. }
  82. return;
  83. }
  84. /*
  85. * Mixing functions.
  86. *
  87. * These are specialized functions which mix each entry in entries to
  88. * destination. They are called using a dispatch table generating by the
  89. * ALMixManager and ALMixFuncs.
  90. *
  91. * The number in the function name refers to the number of entries which the
  92. * function can handle. This number is exact, not an upperbound, so the
  93. * number of streams in entries must match the function exactly.
  94. */
  95. void MixAudio16_0(UNUSED(ALshort *dst), UNUSED(alMixEntry *entries)) {
  96. return;
  97. }
  98. void MixAudio16_1(ALshort *dst, alMixEntry *entries) {
  99. MixAudio16(dst, entries->data, entries->bytes);
  100. return;
  101. }
  102. void MixAudio16_2(ALshort *dst, alMixEntry *entries) {
  103. ALshort *srcs0[2];
  104. int len;
  105. #ifndef MMX_SUPPORT
  106. int sample;
  107. #endif
  108. len = entries[0].bytes;
  109. len /= sizeof(ALshort);
  110. srcs0[0] = entries[0].data;
  111. srcs0[1] = entries[1].data;
  112. #ifndef MMX_SUPPORT
  113. while(len--) {
  114. sample = *dst;
  115. sample = *srcs0[0];
  116. sample += *srcs0[1];
  117. if(sample > max_audioval ) {
  118. *dst = max_audioval;
  119. } else if(sample < min_audioval ) {
  120. *dst = min_audioval;
  121. } else {
  122. *dst = sample;
  123. }
  124. srcs0[0]++;
  125. srcs0[1]++;
  126. dst++;
  127. }
  128. #else
  129. mix16_2( dst, srcs0, len );
  130. #endif
  131. return;
  132. }
  133. void MixAudio16_3(ALshort *dst, alMixEntry *entries) {
  134. ALshort *srcs0[2];
  135. ALshort *srcs1;
  136. int len;
  137. #ifndef MMX_SUPPORT
  138. int sample;
  139. #endif
  140. len = entries[0].bytes;
  141. len /= sizeof(ALshort);
  142. srcs0[0] = entries[0].data;
  143. srcs0[1] = entries[1].data;
  144. srcs1 = entries[2].data;
  145. #ifndef MMX_SUPPORT
  146. while(len--) {
  147. sample = *dst;
  148. sample = *srcs0[0];
  149. sample += *srcs0[1];
  150. sample += *srcs1;
  151. if(sample > max_audioval ) {
  152. *dst = max_audioval;
  153. } else if(sample < min_audioval ) {
  154. *dst = min_audioval;
  155. } else {
  156. *dst = sample;
  157. }
  158. srcs0[0]++;
  159. srcs0[1]++;
  160. srcs1++;
  161. dst++;
  162. }
  163. #else
  164. mix16_2( dst, srcs0, len );
  165. mix16_1( dst, srcs1, len );
  166. #endif
  167. return;
  168. }
  169. void MixAudio16_4(ALshort *dst, alMixEntry *entries) {
  170. ALshort *srcs0[2];
  171. ALshort *srcs1[2];
  172. int len;
  173. #ifndef MMX_SUPPORT
  174. int sample;
  175. #endif
  176. len = entries[0].bytes;
  177. len /= sizeof(ALshort);
  178. srcs0[0] = entries[0].data;
  179. srcs0[1] = entries[1].data;
  180. srcs1[0] = entries[2].data;
  181. srcs1[1] = entries[3].data;
  182. #ifndef MMX_SUPPORT
  183. while(len--) {
  184. sample = *dst;
  185. sample = *srcs0[0];
  186. sample += *srcs0[1];
  187. sample += *srcs1[0];
  188. sample += *srcs1[1];
  189. if(sample > max_audioval ) {
  190. *dst = max_audioval;
  191. } else if(sample < min_audioval ) {
  192. *dst = min_audioval;
  193. } else {
  194. *dst = sample;
  195. }
  196. srcs0[0]++;
  197. srcs0[1]++;
  198. srcs1[0]++;
  199. srcs1[1]++;
  200. dst++;
  201. }
  202. #else
  203. mix16_2( dst, srcs0, len );
  204. mix16_2( dst, srcs1, len );
  205. #endif
  206. return;
  207. }
  208. void MixAudio16_5(ALshort *dst, alMixEntry *entries) {
  209. ALshort *srcs0[2];
  210. ALshort *srcs1[2];
  211. ALshort *srcs2;
  212. int len;
  213. #ifndef MMX_SUPPORT
  214. int sample;
  215. #endif
  216. len = entries[0].bytes;
  217. len /= sizeof(ALshort);
  218. srcs0[0] = entries[0].data;
  219. srcs0[1] = entries[1].data;
  220. srcs1[0] = entries[2].data;
  221. srcs1[1] = entries[3].data;
  222. srcs2 = entries[4].data;
  223. #ifndef MMX_SUPPORT
  224. while(len--) {
  225. sample = *dst;
  226. sample = *srcs0[0];
  227. sample += *srcs0[1];
  228. sample += *srcs1[0];
  229. sample += *srcs1[1];
  230. sample += *srcs2;
  231. if(sample > max_audioval ) {
  232. *dst = max_audioval;
  233. } else if(sample < min_audioval ) {
  234. *dst = min_audioval;
  235. } else {
  236. *dst = sample;
  237. }
  238. srcs0[0]++;
  239. srcs0[1]++;
  240. srcs1[0]++;
  241. srcs1[1]++;
  242. srcs2++;
  243. dst++;
  244. }
  245. #else
  246. mix16_2( dst, srcs0, len );
  247. mix16_2( dst, srcs1, len );
  248. mix16_1( dst, srcs2, len );
  249. #endif
  250. return;
  251. }
  252. void MixAudio16_6(ALshort *dst, alMixEntry *entries) {
  253. ALshort *srcs0[2];
  254. ALshort *srcs1[2];
  255. ALshort *srcs2[2];
  256. int len;
  257. #ifndef MMX_SUPPORT
  258. int sample;
  259. #endif
  260. len = entries[0].bytes;
  261. len /= sizeof(ALshort);
  262. srcs0[0] = entries[0].data;
  263. srcs0[1] = entries[1].data;
  264. srcs1[0] = entries[2].data;
  265. srcs1[1] = entries[3].data;
  266. srcs2[0] = entries[4].data;
  267. srcs2[1] = entries[5].data;
  268. #ifndef MMX_SUPPORT
  269. while(len--) {
  270. sample = *dst;
  271. sample = *srcs0[0];
  272. sample += *srcs0[1];
  273. sample += *srcs1[0];
  274. sample += *srcs1[1];
  275. sample += *srcs2[0];
  276. sample += *srcs2[1];
  277. if(sample > max_audioval ) {
  278. *dst = max_audioval;
  279. } else if(sample < min_audioval ) {
  280. *dst = min_audioval;
  281. } else {
  282. *dst = sample;
  283. }
  284. srcs0[0]++;
  285. srcs0[1]++;
  286. srcs1[0]++;
  287. srcs1[1]++;
  288. srcs2[0]++;
  289. srcs2[1]++;
  290. dst++;
  291. }
  292. #else
  293. mix16_2( dst, srcs0, len );
  294. mix16_2( dst, srcs1, len );
  295. mix16_2( dst, srcs2, len );
  296. #endif
  297. return;
  298. }
  299. void MixAudio16_7(ALshort *dst, alMixEntry *entries) {
  300. ALshort *srcs0[2];
  301. ALshort *srcs1[2];
  302. ALshort *srcs2[2];
  303. ALshort *srcs3;
  304. int len;
  305. #ifndef MMX_SUPPORT
  306. int sample;
  307. #endif
  308. len = entries[0].bytes;
  309. len /= sizeof(ALshort);
  310. srcs0[0] = entries[0].data;
  311. srcs0[1] = entries[1].data;
  312. srcs1[0] = entries[2].data;
  313. srcs1[1] = entries[3].data;
  314. srcs2[0] = entries[4].data;
  315. srcs2[1] = entries[5].data;
  316. srcs3 = entries[6].data;
  317. #ifndef MMX_SUPPORT
  318. while(len--) {
  319. sample = *dst;
  320. sample = *srcs0[0];
  321. sample += *srcs0[1];
  322. sample += *srcs1[0];
  323. sample += *srcs1[1];
  324. sample += *srcs2[0];
  325. sample += *srcs2[1];
  326. sample += *srcs3;
  327. if(sample > max_audioval ) {
  328. *dst = max_audioval;
  329. } else if(sample < min_audioval ) {
  330. *dst = min_audioval;
  331. } else {
  332. *dst = sample;
  333. }
  334. srcs0[0]++;
  335. srcs0[1]++;
  336. srcs1[0]++;
  337. srcs1[1]++;
  338. srcs2[0]++;
  339. srcs2[1]++;
  340. srcs3++;
  341. dst++;
  342. }
  343. #else
  344. mix16_2( dst, srcs0, len );
  345. mix16_2( dst, srcs1, len );
  346. mix16_2( dst, srcs2, len );
  347. mix16_1( dst, srcs3, len );
  348. #endif
  349. return;
  350. }
  351. void MixAudio16_8(ALshort *dst, alMixEntry *entries) {
  352. ALshort *srcs0[2];
  353. ALshort *srcs1[2];
  354. ALshort *srcs2[2];
  355. ALshort *srcs3[2];
  356. int len;
  357. #ifndef MMX_SUPPORT
  358. int sample;
  359. #endif
  360. len = entries[0].bytes;
  361. len /= sizeof(ALshort);
  362. srcs0[0] = entries[0].data;
  363. srcs0[1] = entries[1].data;
  364. srcs1[0] = entries[2].data;
  365. srcs1[1] = entries[3].data;
  366. srcs2[0] = entries[4].data;
  367. srcs2[1] = entries[5].data;
  368. srcs3[0] = entries[6].data;
  369. srcs3[1] = entries[7].data;
  370. #ifndef MMX_SUPPORT
  371. while(len--) {
  372. sample = *dst;
  373. sample = *srcs0[0];
  374. sample += *srcs0[1];
  375. sample += *srcs1[0];
  376. sample += *srcs1[1];
  377. sample += *srcs2[0];
  378. sample += *srcs2[1];
  379. sample += *srcs3[0];
  380. sample += *srcs3[1];
  381. if(sample > max_audioval ) {
  382. *dst = max_audioval;
  383. } else if(sample < min_audioval ) {
  384. *dst = min_audioval;
  385. } else {
  386. *dst = sample;
  387. }
  388. srcs0[0]++;
  389. srcs0[1]++;
  390. srcs1[0]++;
  391. srcs1[1]++;
  392. srcs2[0]++;
  393. srcs2[1]++;
  394. srcs3[0]++;
  395. srcs3[1]++;
  396. dst++;
  397. }
  398. #else
  399. mix16_2( dst, srcs0, len );
  400. mix16_2( dst, srcs1, len );
  401. mix16_2( dst, srcs2, len );
  402. mix16_2( dst, srcs3, len );
  403. #endif
  404. return;
  405. }
  406. void MixAudio16_9(ALshort *dst, alMixEntry *entries) {
  407. ALshort *srcs0[2];
  408. ALshort *srcs1[2];
  409. ALshort *srcs2[2];
  410. ALshort *srcs3[2];
  411. ALshort *srcs4;
  412. int len;
  413. #ifndef MMX_SUPPORT
  414. int sample;
  415. #endif
  416. len = entries[0].bytes;
  417. len /= sizeof(ALshort);
  418. srcs0[0] = entries[0].data;
  419. srcs0[1] = entries[1].data;
  420. srcs1[0] = entries[2].data;
  421. srcs1[1] = entries[3].data;
  422. srcs2[0] = entries[4].data;
  423. srcs2[1] = entries[5].data;
  424. srcs3[0] = entries[6].data;
  425. srcs3[1] = entries[7].data;
  426. srcs4 = entries[8].data;
  427. #ifndef MMX_SUPPORT
  428. while(len--) {
  429. sample = *dst;
  430. sample = *srcs0[0];
  431. sample += *srcs0[1];
  432. sample += *srcs1[0];
  433. sample += *srcs1[1];
  434. sample += *srcs2[0];
  435. sample += *srcs2[1];
  436. sample += *srcs3[0];
  437. sample += *srcs3[1];
  438. sample += *srcs4;
  439. if(sample > max_audioval ) {
  440. *dst = max_audioval;
  441. } else if(sample < min_audioval ) {
  442. *dst = min_audioval;
  443. } else {
  444. *dst = sample;
  445. }
  446. srcs0[0]++;
  447. srcs0[1]++;
  448. srcs1[0]++;
  449. srcs1[1]++;
  450. srcs2[0]++;
  451. srcs2[1]++;
  452. srcs3[0]++;
  453. srcs3[1]++;
  454. srcs4++;
  455. dst++;
  456. }
  457. #else
  458. mix16_2( dst, srcs0, len );
  459. mix16_2( dst, srcs1, len );
  460. mix16_2( dst, srcs2, len );
  461. mix16_2( dst, srcs3, len );
  462. mix16_1( dst, srcs4, len );
  463. #endif
  464. return;
  465. }
  466. void MixAudio16_10(ALshort *dst, alMixEntry *entries) {
  467. ALshort *srcs0[2];
  468. ALshort *srcs1[2];
  469. ALshort *srcs2[2];
  470. ALshort *srcs3[2];
  471. ALshort *srcs4[2];
  472. int len;
  473. #ifndef MMX_SUPPORT
  474. int sample;
  475. #endif
  476. len = entries[0].bytes;
  477. len /= sizeof(ALshort);
  478. srcs0[0] = entries[0].data;
  479. srcs0[1] = entries[1].data;
  480. srcs1[0] = entries[2].data;
  481. srcs1[1] = entries[3].data;
  482. srcs2[0] = entries[4].data;
  483. srcs2[1] = entries[5].data;
  484. srcs3[0] = entries[6].data;
  485. srcs3[1] = entries[7].data;
  486. srcs4[0] = entries[8].data;
  487. srcs4[1] = entries[9].data;
  488. #ifndef MMX_SUPPORT
  489. while(len--) {
  490. sample = *dst;
  491. sample = *srcs0[0];
  492. sample += *srcs0[1];
  493. sample += *srcs1[0];
  494. sample += *srcs1[1];
  495. sample += *srcs2[0];
  496. sample += *srcs2[1];
  497. sample += *srcs3[0];
  498. sample += *srcs3[1];
  499. sample += *srcs4[0];
  500. sample += *srcs4[1];
  501. if(sample > max_audioval ) {
  502. *dst = max_audioval;
  503. } else if(sample < min_audioval ) {
  504. *dst = min_audioval;
  505. } else {
  506. *dst = sample;
  507. }
  508. srcs0[0]++;
  509. srcs0[1]++;
  510. srcs1[0]++;
  511. srcs1[1]++;
  512. srcs2[0]++;
  513. srcs2[1]++;
  514. srcs3[0]++;
  515. srcs3[1]++;
  516. srcs4[0]++;
  517. srcs4[1]++;
  518. dst++;
  519. }
  520. #else
  521. mix16_2( dst, srcs0, len );
  522. mix16_2( dst, srcs1, len );
  523. mix16_2( dst, srcs2, len );
  524. mix16_2( dst, srcs3, len );
  525. mix16_2( dst, srcs4, len );
  526. #endif
  527. return;
  528. }
  529. void MixAudio16_11(ALshort *dst, alMixEntry *entries) {
  530. ALshort *srcs0[2];
  531. ALshort *srcs1[2];
  532. ALshort *srcs2[2];
  533. ALshort *srcs3[2];
  534. ALshort *srcs4[2];
  535. ALshort *srcs5;
  536. int len;
  537. #ifndef MMX_SUPPORT
  538. int sample;
  539. #endif
  540. len = entries[0].bytes;
  541. len /= sizeof(ALshort);
  542. srcs0[0] = entries[0].data;
  543. srcs0[1] = entries[1].data;
  544. srcs1[0] = entries[2].data;
  545. srcs1[1] = entries[3].data;
  546. srcs2[0] = entries[4].data;
  547. srcs2[1] = entries[5].data;
  548. srcs3[0] = entries[6].data;
  549. srcs3[1] = entries[7].data;
  550. srcs4[0] = entries[8].data;
  551. srcs4[1] = entries[9].data;
  552. srcs5 = entries[10].data;
  553. #ifndef MMX_SUPPORT
  554. while(len--) {
  555. sample = *dst;
  556. sample = *srcs0[0];
  557. sample += *srcs0[1];
  558. sample += *srcs1[0];
  559. sample += *srcs1[1];
  560. sample += *srcs2[0];
  561. sample += *srcs2[1];
  562. sample += *srcs3[0];
  563. sample += *srcs3[1];
  564. sample += *srcs4[0];
  565. sample += *srcs4[1];
  566. sample += *srcs5;
  567. if(sample > max_audioval ) {
  568. *dst = max_audioval;
  569. } else if(sample < min_audioval ) {
  570. *dst = min_audioval;
  571. } else {
  572. *dst = sample;
  573. }
  574. srcs0[0]++;
  575. srcs0[1]++;
  576. srcs1[0]++;
  577. srcs1[1]++;
  578. srcs2[0]++;
  579. srcs2[1]++;
  580. srcs3[0]++;
  581. srcs3[1]++;
  582. srcs4[0]++;
  583. srcs4[1]++;
  584. srcs5++;
  585. dst++;
  586. }
  587. #else
  588. mix16_2( dst, srcs0, len );
  589. mix16_2( dst, srcs1, len );
  590. mix16_2( dst, srcs2, len );
  591. mix16_2( dst, srcs3, len );
  592. mix16_2( dst, srcs4, len );
  593. mix16_1( dst, srcs5, len );
  594. #endif
  595. return;
  596. }
  597. void MixAudio16_12(ALshort *dst, alMixEntry *entries) {
  598. ALshort *srcs0[2];
  599. ALshort *srcs1[2];
  600. ALshort *srcs2[2];
  601. ALshort *srcs3[2];
  602. ALshort *srcs4[2];
  603. ALshort *srcs5[2];
  604. int len;
  605. #ifndef MMX_SUPPORT
  606. int sample;
  607. #endif
  608. len = entries[0].bytes;
  609. len /= sizeof(ALshort);
  610. srcs0[0] = entries[0].data;
  611. srcs0[1] = entries[1].data;
  612. srcs1[0] = entries[2].data;
  613. srcs1[1] = entries[3].data;
  614. srcs2[0] = entries[4].data;
  615. srcs2[1] = entries[5].data;
  616. srcs3[0] = entries[6].data;
  617. srcs3[1] = entries[7].data;
  618. srcs4[0] = entries[8].data;
  619. srcs4[1] = entries[9].data;
  620. srcs5[0] = entries[10].data;
  621. srcs5[1] = entries[11].data;
  622. #ifndef MMX_SUPPORT
  623. while(len--) {
  624. sample = *dst;
  625. sample = *srcs0[0];
  626. sample += *srcs0[1];
  627. sample += *srcs1[0];
  628. sample += *srcs1[1];
  629. sample += *srcs2[0];
  630. sample += *srcs2[1];
  631. sample += *srcs3[0];
  632. sample += *srcs3[1];
  633. sample += *srcs4[0];
  634. sample += *srcs4[1];
  635. sample += *srcs5[0];
  636. sample += *srcs5[1];
  637. if(sample > max_audioval ) {
  638. *dst = max_audioval;
  639. } else if(sample < min_audioval ) {
  640. *dst = min_audioval;
  641. } else {
  642. *dst = sample;
  643. }
  644. srcs0[0]++;
  645. srcs0[1]++;
  646. srcs1[0]++;
  647. srcs1[1]++;
  648. srcs2[0]++;
  649. srcs2[1]++;
  650. srcs3[0]++;
  651. srcs3[1]++;
  652. srcs4[0]++;
  653. srcs4[1]++;
  654. srcs5[0]++;
  655. srcs5[1]++;
  656. dst++;
  657. }
  658. #else
  659. mix16_2( dst, srcs0, len );
  660. mix16_2( dst, srcs1, len );
  661. mix16_2( dst, srcs2, len );
  662. mix16_2( dst, srcs3, len );
  663. mix16_2( dst, srcs4, len );
  664. mix16_2( dst, srcs5, len );
  665. #endif
  666. return;
  667. }
  668. void MixAudio16_13(ALshort *dst, alMixEntry *entries) {
  669. ALshort *srcs0[2];
  670. ALshort *srcs1[2];
  671. ALshort *srcs2[2];
  672. ALshort *srcs3[2];
  673. ALshort *srcs4[2];
  674. ALshort *srcs5[2];
  675. ALshort *srcs6;
  676. int len;
  677. #ifndef MMX_SUPPORT
  678. int sample;
  679. #endif
  680. len = entries[0].bytes;
  681. len /= sizeof(ALshort);
  682. srcs0[0] = entries[0].data;
  683. srcs0[1] = entries[1].data;
  684. srcs1[0] = entries[2].data;
  685. srcs1[1] = entries[3].data;
  686. srcs2[0] = entries[4].data;
  687. srcs2[1] = entries[5].data;
  688. srcs3[0] = entries[6].data;
  689. srcs3[1] = entries[7].data;
  690. srcs4[0] = entries[8].data;
  691. srcs4[1] = entries[9].data;
  692. srcs5[0] = entries[10].data;
  693. srcs5[1] = entries[11].data;
  694. srcs6 = entries[12].data;
  695. #ifndef MMX_SUPPORT
  696. while(len--) {
  697. sample = *dst;
  698. sample = *srcs0[0];
  699. sample += *srcs0[1];
  700. sample += *srcs1[0];
  701. sample += *srcs1[1];
  702. sample += *srcs2[0];
  703. sample += *srcs2[1];
  704. sample += *srcs3[0];
  705. sample += *srcs3[1];
  706. sample += *srcs4[0];
  707. sample += *srcs4[1];
  708. sample += *srcs5[0];
  709. sample += *srcs5[1];
  710. sample += *srcs6;
  711. if(sample > max_audioval ) {
  712. *dst = max_audioval;
  713. } else if(sample < min_audioval ) {
  714. *dst = min_audioval;
  715. } else {
  716. *dst = sample;
  717. }
  718. srcs0[0]++;
  719. srcs0[1]++;
  720. srcs1[0]++;
  721. srcs1[1]++;
  722. srcs2[0]++;
  723. srcs2[1]++;
  724. srcs3[0]++;
  725. srcs3[1]++;
  726. srcs4[0]++;
  727. srcs4[1]++;
  728. srcs5[0]++;
  729. srcs5[1]++;
  730. srcs6++;
  731. dst++;
  732. }
  733. #else
  734. mix16_2( dst, srcs0, len );
  735. mix16_2( dst, srcs1, len );
  736. mix16_2( dst, srcs2, len );
  737. mix16_2( dst, srcs3, len );
  738. mix16_2( dst, srcs4, len );
  739. mix16_2( dst, srcs5, len );
  740. mix16_1( dst, srcs6, len );
  741. #endif
  742. return;
  743. }
  744. void MixAudio16_14(ALshort *dst, alMixEntry *entries) {
  745. ALshort *srcs0[2];
  746. ALshort *srcs1[2];
  747. ALshort *srcs2[2];
  748. ALshort *srcs3[2];
  749. ALshort *srcs4[2];
  750. ALshort *srcs5[2];
  751. ALshort *srcs6[2];
  752. int len;
  753. #ifndef MMX_SUPPORT
  754. int sample;
  755. #endif
  756. len = entries[0].bytes;
  757. len /= sizeof(ALshort);
  758. srcs0[0] = entries[0].data;
  759. srcs0[1] = entries[1].data;
  760. srcs1[0] = entries[2].data;
  761. srcs1[1] = entries[3].data;
  762. srcs2[0] = entries[4].data;
  763. srcs2[1] = entries[5].data;
  764. srcs3[0] = entries[6].data;
  765. srcs3[1] = entries[7].data;
  766. srcs4[0] = entries[8].data;
  767. srcs4[1] = entries[9].data;
  768. srcs5[0] = entries[10].data;
  769. srcs5[1] = entries[11].data;
  770. srcs6[0] = entries[12].data;
  771. srcs6[1] = entries[13].data;
  772. #ifndef MMX_SUPPORT
  773. while(len--) {
  774. sample = *dst;
  775. sample = *srcs0[0];
  776. sample += *srcs0[1];
  777. sample += *srcs1[0];
  778. sample += *srcs1[1];
  779. sample += *srcs2[0];
  780. sample += *srcs2[1];
  781. sample += *srcs3[0];
  782. sample += *srcs3[1];
  783. sample += *srcs4[0];
  784. sample += *srcs4[1];
  785. sample += *srcs5[0];
  786. sample += *srcs5[1];
  787. sample += *srcs6[0];
  788. sample += *srcs6[1];
  789. if(sample > max_audioval ) {
  790. *dst = max_audioval;
  791. } else if(sample < min_audioval ) {
  792. *dst = min_audioval;
  793. } else {
  794. *dst = sample;
  795. }
  796. srcs0[0]++;
  797. srcs0[1]++;
  798. srcs1[0]++;
  799. srcs1[1]++;
  800. srcs2[0]++;
  801. srcs2[1]++;
  802. srcs3[0]++;
  803. srcs3[1]++;
  804. srcs4[0]++;
  805. srcs4[1]++;
  806. srcs5[0]++;
  807. srcs5[1]++;
  808. srcs6[0]++;
  809. srcs6[1]++;
  810. dst++;
  811. }
  812. #else
  813. mix16_2( dst, srcs0, len );
  814. mix16_2( dst, srcs1, len );
  815. mix16_2( dst, srcs2, len );
  816. mix16_2( dst, srcs3, len );
  817. mix16_2( dst, srcs4, len );
  818. mix16_2( dst, srcs5, len );
  819. mix16_2( dst, srcs6, len );
  820. #endif
  821. return;
  822. }
  823. void MixAudio16_15(ALshort *dst, alMixEntry *entries) {
  824. ALshort *srcs0[2];
  825. ALshort *srcs1[2];
  826. ALshort *srcs2[2];
  827. ALshort *srcs3[2];
  828. ALshort *srcs4[2];
  829. ALshort *srcs5[2];
  830. ALshort *srcs6[2];
  831. ALshort *srcs7;
  832. int len;
  833. #ifndef MMX_SUPPORT
  834. int sample;
  835. #endif
  836. len = entries[0].bytes;
  837. len /= sizeof(ALshort);
  838. srcs0[0] = entries[0].data;
  839. srcs0[1] = entries[1].data;
  840. srcs1[0] = entries[2].data;
  841. srcs1[1] = entries[3].data;
  842. srcs2[0] = entries[4].data;
  843. srcs2[1] = entries[5].data;
  844. srcs3[0] = entries[6].data;
  845. srcs3[1] = entries[7].data;
  846. srcs4[0] = entries[8].data;
  847. srcs4[1] = entries[9].data;
  848. srcs5[0] = entries[10].data;
  849. srcs5[1] = entries[11].data;
  850. srcs6[0] = entries[12].data;
  851. srcs6[1] = entries[13].data;
  852. srcs7 = entries[14].data;
  853. #ifndef MMX_SUPPORT
  854. while(len--) {
  855. sample = *dst;
  856. sample = *srcs0[0];
  857. sample += *srcs0[1];
  858. sample += *srcs1[0];
  859. sample += *srcs1[1];
  860. sample += *srcs2[0];
  861. sample += *srcs2[1];
  862. sample += *srcs3[0];
  863. sample += *srcs3[1];
  864. sample += *srcs4[0];
  865. sample += *srcs4[1];
  866. sample += *srcs5[0];
  867. sample += *srcs5[1];
  868. sample += *srcs6[0];
  869. sample += *srcs6[1];
  870. sample += *srcs7;
  871. if(sample > max_audioval ) {
  872. *dst = max_audioval;
  873. } else if(sample < min_audioval ) {
  874. *dst = min_audioval;
  875. } else {
  876. *dst = sample;
  877. }
  878. srcs0[0]++;
  879. srcs0[1]++;
  880. srcs1[0]++;
  881. srcs1[1]++;
  882. srcs2[0]++;
  883. srcs2[1]++;
  884. srcs3[0]++;
  885. srcs3[1]++;
  886. srcs4[0]++;
  887. srcs4[1]++;
  888. srcs5[0]++;
  889. srcs5[1]++;
  890. srcs6[0]++;
  891. srcs6[1]++;
  892. srcs7++;
  893. dst++;
  894. }
  895. #else
  896. mix16_2( dst, srcs0, len );
  897. mix16_2( dst, srcs1, len );
  898. mix16_2( dst, srcs2, len );
  899. mix16_2( dst, srcs3, len );
  900. mix16_2( dst, srcs4, len );
  901. mix16_2( dst, srcs5, len );
  902. mix16_2( dst, srcs6, len );
  903. mix16_1( dst, srcs7, len );
  904. #endif
  905. return;
  906. }
  907. void MixAudio16_16(ALshort *dst, alMixEntry *entries) {
  908. ALshort *srcs0[2];
  909. ALshort *srcs1[2];
  910. ALshort *srcs2[2];
  911. ALshort *srcs3[2];
  912. ALshort *srcs4[2];
  913. ALshort *srcs5[2];
  914. ALshort *srcs6[2];
  915. ALshort *srcs7[2];
  916. int len;
  917. #ifndef MMX_SUPPORT
  918. int sample;
  919. #endif
  920. len = entries[0].bytes;
  921. len /= sizeof(ALshort);
  922. srcs0[0] = entries[0].data;
  923. srcs0[1] = entries[1].data;
  924. srcs1[0] = entries[2].data;
  925. srcs1[1] = entries[3].data;
  926. srcs2[0] = entries[4].data;
  927. srcs2[1] = entries[5].data;
  928. srcs3[0] = entries[6].data;
  929. srcs3[1] = entries[7].data;
  930. srcs4[0] = entries[8].data;
  931. srcs4[1] = entries[9].data;
  932. srcs5[0] = entries[10].data;
  933. srcs5[1] = entries[11].data;
  934. srcs6[0] = entries[12].data;
  935. srcs6[1] = entries[13].data;
  936. srcs7[0] = entries[14].data;
  937. srcs7[1] = entries[15].data;
  938. #ifndef MMX_SUPPORT
  939. while(len--) {
  940. sample = *dst;
  941. sample = *srcs0[0];
  942. sample += *srcs0[1];
  943. sample += *srcs1[0];
  944. sample += *srcs1[1];
  945. sample += *srcs2[0];
  946. sample += *srcs2[1];
  947. sample += *srcs3[0];
  948. sample += *srcs3[1];
  949. sample += *srcs4[0];
  950. sample += *srcs4[1];
  951. sample += *srcs5[0];
  952. sample += *srcs5[1];
  953. sample += *srcs6[0];
  954. sample += *srcs6[1];
  955. sample += *srcs7[0];
  956. sample += *srcs7[1];
  957. if(sample > max_audioval ) {
  958. *dst = max_audioval;
  959. } else if(sample < min_audioval ) {
  960. *dst = min_audioval;
  961. } else {
  962. *dst = sample;
  963. }
  964. srcs0[0]++;
  965. srcs0[1]++;
  966. srcs1[0]++;
  967. srcs1[1]++;
  968. srcs2[0]++;
  969. srcs2[1]++;
  970. srcs3[0]++;
  971. srcs3[1]++;
  972. srcs4[0]++;
  973. srcs4[1]++;
  974. srcs5[0]++;
  975. srcs5[1]++;
  976. srcs6[0]++;
  977. srcs6[1]++;
  978. srcs7[0]++;
  979. srcs7[1]++;
  980. dst++;
  981. }
  982. #else
  983. mix16_2( dst, srcs0, len );
  984. mix16_2( dst, srcs1, len );
  985. mix16_2( dst, srcs2, len );
  986. mix16_2( dst, srcs3, len );
  987. mix16_2( dst, srcs4, len );
  988. mix16_2( dst, srcs5, len );
  989. mix16_2( dst, srcs6, len );
  990. mix16_2( dst, srcs7, len );
  991. #endif
  992. return;
  993. }
  994. void MixAudio16_17(ALshort *dst, alMixEntry *entries) {
  995. ALshort *srcs0[2];
  996. ALshort *srcs1[2];
  997. ALshort *srcs2[2];
  998. ALshort *srcs3[2];
  999. ALshort *srcs4[2];
  1000. ALshort *srcs5[2];
  1001. ALshort *srcs6[2];
  1002. ALshort *srcs7[2];
  1003. ALshort *srcs8;
  1004. int len;
  1005. #ifndef MMX_SUPPORT
  1006. int sample;
  1007. #endif
  1008. len = entries[0].bytes;
  1009. len /= sizeof(ALshort);
  1010. srcs0[0] = entries[0].data;
  1011. srcs0[1] = entries[1].data;
  1012. srcs1[0] = entries[2].data;
  1013. srcs1[1] = entries[3].data;
  1014. srcs2[0] = entries[4].data;
  1015. srcs2[1] = entries[5].data;
  1016. srcs3[0] = entries[6].data;
  1017. srcs3[1] = entries[7].data;
  1018. srcs4[0] = entries[8].data;
  1019. srcs4[1] = entries[9].data;
  1020. srcs5[0] = entries[10].data;
  1021. srcs5[1] = entries[11].data;
  1022. srcs6[0] = entries[12].data;
  1023. srcs6[1] = entries[13].data;
  1024. srcs7[0] = entries[14].data;
  1025. srcs7[1] = entries[15].data;
  1026. srcs8 = entries[16].data;
  1027. #ifndef MMX_SUPPORT
  1028. while(len--) {
  1029. sample = *dst;
  1030. sample = *srcs0[0];
  1031. sample += *srcs0[1];
  1032. sample += *srcs1[0];
  1033. sample += *srcs1[1];
  1034. sample += *srcs2[0];
  1035. sample += *srcs2[1];
  1036. sample += *srcs3[0];
  1037. sample += *srcs3[1];
  1038. sample += *srcs4[0];
  1039. sample += *srcs4[1];
  1040. sample += *srcs5[0];
  1041. sample += *srcs5[1];
  1042. sample += *srcs6[0];
  1043. sample += *srcs6[1];
  1044. sample += *srcs7[0];
  1045. sample += *srcs7[1];
  1046. sample += *srcs8;
  1047. if(sample > max_audioval ) {
  1048. *dst = max_audioval;
  1049. } else if(sample < min_audioval ) {
  1050. *dst = min_audioval;
  1051. } else {
  1052. *dst = sample;
  1053. }
  1054. srcs0[0]++;
  1055. srcs0[1]++;
  1056. srcs1[0]++;
  1057. srcs1[1]++;
  1058. srcs2[0]++;
  1059. srcs2[1]++;
  1060. srcs3[0]++;
  1061. srcs3[1]++;
  1062. srcs4[0]++;
  1063. srcs4[1]++;
  1064. srcs5[0]++;
  1065. srcs5[1]++;
  1066. srcs6[0]++;
  1067. srcs6[1]++;
  1068. srcs7[0]++;
  1069. srcs7[1]++;
  1070. srcs8++;
  1071. dst++;
  1072. }
  1073. #else
  1074. mix16_2( dst, srcs0, len );
  1075. mix16_2( dst, srcs1, len );
  1076. mix16_2( dst, srcs2, len );
  1077. mix16_2( dst, srcs3, len );
  1078. mix16_2( dst, srcs4, len );
  1079. mix16_2( dst, srcs5, len );
  1080. mix16_2( dst, srcs6, len );
  1081. mix16_2( dst, srcs7, len );
  1082. mix16_1( dst, srcs8, len );
  1083. #endif
  1084. return;
  1085. }
  1086. void MixAudio16_18(ALshort *dst, alMixEntry *entries) {
  1087. ALshort *srcs0[2];
  1088. ALshort *srcs1[2];
  1089. ALshort *srcs2[2];
  1090. ALshort *srcs3[2];
  1091. ALshort *srcs4[2];
  1092. ALshort *srcs5[2];
  1093. ALshort *srcs6[2];
  1094. ALshort *srcs7[2];
  1095. ALshort *srcs8[2];
  1096. int len;
  1097. #ifndef MMX_SUPPORT
  1098. int sample;
  1099. #endif
  1100. len = entries[0].bytes;
  1101. len /= sizeof(ALshort);
  1102. srcs0[0] = entries[0].data;
  1103. srcs0[1] = entries[1].data;
  1104. srcs1[0] = entries[2].data;
  1105. srcs1[1] = entries[3].data;
  1106. srcs2[0] = entries[4].data;
  1107. srcs2[1] = entries[5].data;
  1108. srcs3[0] = entries[6].data;
  1109. srcs3[1] = entries[7].data;
  1110. srcs4[0] = entries[8].data;
  1111. srcs4[1] = entries[9].data;
  1112. srcs5[0] = entries[10].data;
  1113. srcs5[1] = entries[11].data;
  1114. srcs6[0] = entries[12].data;
  1115. srcs6[1] = entries[13].data;
  1116. srcs7[0] = entries[14].data;
  1117. srcs7[1] = entries[15].data;
  1118. srcs8[0] = entries[16].data;
  1119. srcs8[1] = entries[17].data;
  1120. #ifndef MMX_SUPPORT
  1121. while(len--) {
  1122. sample = *dst;
  1123. sample = *srcs0[0];
  1124. sample += *srcs0[1];
  1125. sample += *srcs1[0];
  1126. sample += *srcs1[1];
  1127. sample += *srcs2[0];
  1128. sample += *srcs2[1];
  1129. sample += *srcs3[0];
  1130. sample += *srcs3[1];
  1131. sample += *srcs4[0];
  1132. sample += *srcs4[1];
  1133. sample += *srcs5[0];
  1134. sample += *srcs5[1];
  1135. sample += *srcs6[0];
  1136. sample += *srcs6[1];
  1137. sample += *srcs7[0];
  1138. sample += *srcs7[1];
  1139. sample += *srcs8[0];
  1140. sample += *srcs8[1];
  1141. if(sample > max_audioval ) {
  1142. *dst = max_audioval;
  1143. } else if(sample < min_audioval ) {
  1144. *dst = min_audioval;
  1145. } else {
  1146. *dst = sample;
  1147. }
  1148. srcs0[0]++;
  1149. srcs0[1]++;
  1150. srcs1[0]++;
  1151. srcs1[1]++;
  1152. srcs2[0]++;
  1153. srcs2[1]++;
  1154. srcs3[0]++;
  1155. srcs3[1]++;
  1156. srcs4[0]++;
  1157. srcs4[1]++;
  1158. srcs5[0]++;
  1159. srcs5[1]++;
  1160. srcs6[0]++;
  1161. srcs6[1]++;
  1162. srcs7[0]++;
  1163. srcs7[1]++;
  1164. srcs8[0]++;
  1165. srcs8[1]++;
  1166. dst++;
  1167. }
  1168. #else
  1169. mix16_2( dst, srcs0, len );
  1170. mix16_2( dst, srcs1, len );
  1171. mix16_2( dst, srcs2, len );
  1172. mix16_2( dst, srcs3, len );
  1173. mix16_2( dst, srcs4, len );
  1174. mix16_2( dst, srcs5, len );
  1175. mix16_2( dst, srcs6, len );
  1176. mix16_2( dst, srcs7, len );
  1177. mix16_2( dst, srcs8, len );
  1178. #endif
  1179. return;
  1180. }
  1181. void MixAudio16_19(ALshort *dst, alMixEntry *entries) {
  1182. ALshort *srcs0[2];
  1183. ALshort *srcs1[2];
  1184. ALshort *srcs2[2];
  1185. ALshort *srcs3[2];
  1186. ALshort *srcs4[2];
  1187. ALshort *srcs5[2];
  1188. ALshort *srcs6[2];
  1189. ALshort *srcs7[2];
  1190. ALshort *srcs8[2];
  1191. ALshort *srcs9;
  1192. int len;
  1193. #ifndef MMX_SUPPORT
  1194. int sample;
  1195. #endif
  1196. len = entries[0].bytes;
  1197. len /= sizeof(ALshort);
  1198. srcs0[0] = entries[0].data;
  1199. srcs0[1] = entries[1].data;
  1200. srcs1[0] = entries[2].data;
  1201. srcs1[1] = entries[3].data;
  1202. srcs2[0] = entries[4].data;
  1203. srcs2[1] = entries[5].data;
  1204. srcs3[0] = entries[6].data;
  1205. srcs3[1] = entries[7].data;
  1206. srcs4[0] = entries[8].data;
  1207. srcs4[1] = entries[9].data;
  1208. srcs5[0] = entries[10].data;
  1209. srcs5[1] = entries[11].data;
  1210. srcs6[0] = entries[12].data;
  1211. srcs6[1] = entries[13].data;
  1212. srcs7[0] = entries[14].data;
  1213. srcs7[1] = entries[15].data;
  1214. srcs8[0] = entries[16].data;
  1215. srcs8[1] = entries[17].data;
  1216. srcs9 = entries[18].data;
  1217. #ifndef MMX_SUPPORT
  1218. while(len--) {
  1219. sample = *dst;
  1220. sample = *srcs0[0];
  1221. sample += *srcs0[1];
  1222. sample += *srcs1[0];
  1223. sample += *srcs1[1];
  1224. sample += *srcs2[0];
  1225. sample += *srcs2[1];
  1226. sample += *srcs3[0];
  1227. sample += *srcs3[1];
  1228. sample += *srcs4[0];
  1229. sample += *srcs4[1];
  1230. sample += *srcs5[0];
  1231. sample += *srcs5[1];
  1232. sample += *srcs6[0];
  1233. sample += *srcs6[1];
  1234. sample += *srcs7[0];
  1235. sample += *srcs7[1];
  1236. sample += *srcs8[0];
  1237. sample += *srcs8[1];
  1238. sample += *srcs9;
  1239. if(sample > max_audioval ) {
  1240. *dst = max_audioval;
  1241. } else if(sample < min_audioval ) {
  1242. *dst = min_audioval;
  1243. } else {
  1244. *dst = sample;
  1245. }
  1246. srcs0[0]++;
  1247. srcs0[1]++;
  1248. srcs1[0]++;
  1249. srcs1[1]++;
  1250. srcs2[0]++;
  1251. srcs2[1]++;
  1252. srcs3[0]++;
  1253. srcs3[1]++;
  1254. srcs4[0]++;
  1255. srcs4[1]++;
  1256. srcs5[0]++;
  1257. srcs5[1]++;
  1258. srcs6[0]++;
  1259. srcs6[1]++;
  1260. srcs7[0]++;
  1261. srcs7[1]++;
  1262. srcs8[0]++;
  1263. srcs8[1]++;
  1264. srcs9++;
  1265. dst++;
  1266. }
  1267. #else
  1268. mix16_2( dst, srcs0, len );
  1269. mix16_2( dst, srcs1, len );
  1270. mix16_2( dst, srcs2, len );
  1271. mix16_2( dst, srcs3, len );
  1272. mix16_2( dst, srcs4, len );
  1273. mix16_2( dst, srcs5, len );
  1274. mix16_2( dst, srcs6, len );
  1275. mix16_2( dst, srcs7, len );
  1276. mix16_2( dst, srcs8, len );
  1277. mix16_1( dst, srcs9, len );
  1278. #endif
  1279. return;
  1280. }
  1281. void MixAudio16_20(ALshort *dst, alMixEntry *entries) {
  1282. ALshort *srcs0[2];
  1283. ALshort *srcs1[2];
  1284. ALshort *srcs2[2];
  1285. ALshort *srcs3[2];
  1286. ALshort *srcs4[2];
  1287. ALshort *srcs5[2];
  1288. ALshort *srcs6[2];
  1289. ALshort *srcs7[2];
  1290. ALshort *srcs8[2];
  1291. ALshort *srcs9[2];
  1292. int len;
  1293. #ifndef MMX_SUPPORT
  1294. int sample;
  1295. #endif
  1296. len = entries[0].bytes;
  1297. len /= sizeof(ALshort);
  1298. srcs0[0] = entries[0].data;
  1299. srcs0[1] = entries[1].data;
  1300. srcs1[0] = entries[2].data;
  1301. srcs1[1] = entries[3].data;
  1302. srcs2[0] = entries[4].data;
  1303. srcs2[1] = entries[5].data;
  1304. srcs3[0] = entries[6].data;
  1305. srcs3[1] = entries[7].data;
  1306. srcs4[0] = entries[8].data;
  1307. srcs4[1] = entries[9].data;
  1308. srcs5[0] = entries[10].data;
  1309. srcs5[1] = entries[11].data;
  1310. srcs6[0] = entries[12].data;
  1311. srcs6[1] = entries[13].data;
  1312. srcs7[0] = entries[14].data;
  1313. srcs7[1] = entries[15].data;
  1314. srcs8[0] = entries[16].data;
  1315. srcs8[1] = entries[17].data;
  1316. srcs9[0] = entries[18].data;
  1317. srcs9[1] = entries[19].data;
  1318. #ifndef MMX_SUPPORT
  1319. while(len--) {
  1320. sample = *dst;
  1321. sample = *srcs0[0];
  1322. sample += *srcs0[1];
  1323. sample += *srcs1[0];
  1324. sample += *srcs1[1];
  1325. sample += *srcs2[0];
  1326. sample += *srcs2[1];
  1327. sample += *srcs3[0];
  1328. sample += *srcs3[1];
  1329. sample += *srcs4[0];
  1330. sample += *srcs4[1];
  1331. sample += *srcs5[0];
  1332. sample += *srcs5[1];
  1333. sample += *srcs6[0];
  1334. sample += *srcs6[1];
  1335. sample += *srcs7[0];
  1336. sample += *srcs7[1];
  1337. sample += *srcs8[0];
  1338. sample += *srcs8[1];
  1339. sample += *srcs9[0];
  1340. sample += *srcs9[1];
  1341. if(sample > max_audioval ) {
  1342. *dst = max_audioval;
  1343. } else if(sample < min_audioval ) {
  1344. *dst = min_audioval;
  1345. } else {
  1346. *dst = sample;
  1347. }
  1348. srcs0[0]++;
  1349. srcs0[1]++;
  1350. srcs1[0]++;
  1351. srcs1[1]++;
  1352. srcs2[0]++;
  1353. srcs2[1]++;
  1354. srcs3[0]++;
  1355. srcs3[1]++;
  1356. srcs4[0]++;
  1357. srcs4[1]++;
  1358. srcs5[0]++;
  1359. srcs5[1]++;
  1360. srcs6[0]++;
  1361. srcs6[1]++;
  1362. srcs7[0]++;
  1363. srcs7[1]++;
  1364. srcs8[0]++;
  1365. srcs8[1]++;
  1366. srcs9[0]++;
  1367. srcs9[1]++;
  1368. dst++;
  1369. }
  1370. #else
  1371. mix16_2( dst, srcs0, len );
  1372. mix16_2( dst, srcs1, len );
  1373. mix16_2( dst, srcs2, len );
  1374. mix16_2( dst, srcs3, len );
  1375. mix16_2( dst, srcs4, len );
  1376. mix16_2( dst, srcs5, len );
  1377. mix16_2( dst, srcs6, len );
  1378. mix16_2( dst, srcs7, len );
  1379. mix16_2( dst, srcs8, len );
  1380. mix16_2( dst, srcs9, len );
  1381. #endif
  1382. return;
  1383. }
  1384. void MixAudio16_21(ALshort *dst, alMixEntry *entries) {
  1385. ALshort *srcs0[2];
  1386. ALshort *srcs1[2];
  1387. ALshort *srcs2[2];
  1388. ALshort *srcs3[2];
  1389. ALshort *srcs4[2];
  1390. ALshort *srcs5[2];
  1391. ALshort *srcs6[2];
  1392. ALshort *srcs7[2];
  1393. ALshort *srcs8[2];
  1394. ALshort *srcs9[2];
  1395. ALshort *srcs10;
  1396. int len;
  1397. #ifndef MMX_SUPPORT
  1398. int sample;
  1399. #endif
  1400. len = entries[0].bytes;
  1401. len /= sizeof(ALshort);
  1402. srcs0[0] = entries[0].data;
  1403. srcs0[1] = entries[1].data;
  1404. srcs1[0] = entries[2].data;
  1405. srcs1[1] = entries[3].data;
  1406. srcs2[0] = entries[4].data;
  1407. srcs2[1] = entries[5].data;
  1408. srcs3[0] = entries[6].data;
  1409. srcs3[1] = entries[7].data;
  1410. srcs4[0] = entries[8].data;
  1411. srcs4[1] = entries[9].data;
  1412. srcs5[0] = entries[10].data;
  1413. srcs5[1] = entries[11].data;
  1414. srcs6[0] = entries[12].data;
  1415. srcs6[1] = entries[13].data;
  1416. srcs7[0] = entries[14].data;
  1417. srcs7[1] = entries[15].data;
  1418. srcs8[0] = entries[16].data;
  1419. srcs8[1] = entries[17].data;
  1420. srcs9[0] = entries[18].data;
  1421. srcs9[1] = entries[19].data;
  1422. srcs10 = entries[20].data;
  1423. #ifndef MMX_SUPPORT
  1424. while(len--) {
  1425. sample = *dst;
  1426. sample = *srcs0[0];
  1427. sample += *srcs0[1];
  1428. sample += *srcs1[0];
  1429. sample += *srcs1[1];
  1430. sample += *srcs2[0];
  1431. sample += *srcs2[1];
  1432. sample += *srcs3[0];
  1433. sample += *srcs3[1];
  1434. sample += *srcs4[0];
  1435. sample += *srcs4[1];
  1436. sample += *srcs5[0];
  1437. sample += *srcs5[1];
  1438. sample += *srcs6[0];
  1439. sample += *srcs6[1];
  1440. sample += *srcs7[0];
  1441. sample += *srcs7[1];
  1442. sample += *srcs8[0];
  1443. sample += *srcs8[1];
  1444. sample += *srcs9[0];
  1445. sample += *srcs9[1];
  1446. sample += *srcs10;
  1447. if(sample > max_audioval ) {
  1448. *dst = max_audioval;
  1449. } else if(sample < min_audioval ) {
  1450. *dst = min_audioval;
  1451. } else {
  1452. *dst = sample;
  1453. }
  1454. srcs0[0]++;
  1455. srcs0[1]++;
  1456. srcs1[0]++;
  1457. srcs1[1]++;
  1458. srcs2[0]++;
  1459. srcs2[1]++;
  1460. srcs3[0]++;
  1461. srcs3[1]++;
  1462. srcs4[0]++;
  1463. srcs4[1]++;
  1464. srcs5[0]++;
  1465. srcs5[1]++;
  1466. srcs6[0]++;
  1467. srcs6[1]++;
  1468. srcs7[0]++;
  1469. srcs7[1]++;
  1470. srcs8[0]++;
  1471. srcs8[1]++;
  1472. srcs9[0]++;
  1473. srcs9[1]++;
  1474. srcs10++;
  1475. dst++;
  1476. }
  1477. #else
  1478. mix16_2( dst, srcs0, len );
  1479. mix16_2( dst, srcs1, len );
  1480. mix16_2( dst, srcs2, len );
  1481. mix16_2( dst, srcs3, len );
  1482. mix16_2( dst, srcs4, len );
  1483. mix16_2( dst, srcs5, len );
  1484. mix16_2( dst, srcs6, len );
  1485. mix16_2( dst, srcs7, len );
  1486. mix16_2( dst, srcs8, len );
  1487. mix16_2( dst, srcs9, len );
  1488. mix16_1( dst, srcs10, len );
  1489. #endif
  1490. return;
  1491. }
  1492. void MixAudio16_22(ALshort *dst, alMixEntry *entries) {
  1493. ALshort *srcs0[2];
  1494. ALshort *srcs1[2];
  1495. ALshort *srcs2[2];
  1496. ALshort *srcs3[2];
  1497. ALshort *srcs4[2];
  1498. ALshort *srcs5[2];
  1499. ALshort *srcs6[2];
  1500. ALshort *srcs7[2];
  1501. ALshort *srcs8[2];
  1502. ALshort *srcs9[2];
  1503. ALshort *srcs10[2];
  1504. int len;
  1505. #ifndef MMX_SUPPORT
  1506. int sample;
  1507. #endif
  1508. len = entries[0].bytes;
  1509. len /= sizeof(ALshort);
  1510. srcs0[0] = entries[0].data;
  1511. srcs0[1] = entries[1].data;
  1512. srcs1[0] = entries[2].data;
  1513. srcs1[1] = entries[3].data;
  1514. srcs2[0] = entries[4].data;
  1515. srcs2[1] = entries[5].data;
  1516. srcs3[0] = entries[6].data;
  1517. srcs3[1] = entries[7].data;
  1518. srcs4[0] = entries[8].data;
  1519. srcs4[1] = entries[9].data;
  1520. srcs5[0] = entries[10].data;
  1521. srcs5[1] = entries[11].data;
  1522. srcs6[0] = entries[12].data;
  1523. srcs6[1] = entries[13].data;
  1524. srcs7[0] = entries[14].data;
  1525. srcs7[1] = entries[15].data;
  1526. srcs8[0] = entries[16].data;
  1527. srcs8[1] = entries[17].data;
  1528. srcs9[0] = entries[18].data;
  1529. srcs9[1] = entries[19].data;
  1530. srcs10[0] = entries[20].data;
  1531. srcs10[1] = entries[21].data;
  1532. #ifndef MMX_SUPPORT
  1533. while(len--) {
  1534. sample = *dst;
  1535. sample = *srcs0[0];
  1536. sample += *srcs0[1];
  1537. sample += *srcs1[0];
  1538. sample += *srcs1[1];
  1539. sample += *srcs2[0];
  1540. sample += *srcs2[1];
  1541. sample += *srcs3[0];
  1542. sample += *srcs3[1];
  1543. sample += *srcs4[0];
  1544. sample += *srcs4[1];
  1545. sample += *srcs5[0];
  1546. sample += *srcs5[1];
  1547. sample += *srcs6[0];
  1548. sample += *srcs6[1];
  1549. sample += *srcs7[0];
  1550. sample += *srcs7[1];
  1551. sample += *srcs8[0];
  1552. sample += *srcs8[1];
  1553. sample += *srcs9[0];
  1554. sample += *srcs9[1];
  1555. sample += *srcs10[0];
  1556. sample += *srcs10[1];
  1557. if(sample > max_audioval ) {
  1558. *dst = max_audioval;
  1559. } else if(sample < min_audioval ) {
  1560. *dst = min_audioval;
  1561. } else {
  1562. *dst = sample;
  1563. }
  1564. srcs0[0]++;
  1565. srcs0[1]++;
  1566. srcs1[0]++;
  1567. srcs1[1]++;
  1568. srcs2[0]++;
  1569. srcs2[1]++;
  1570. srcs3[0]++;
  1571. srcs3[1]++;
  1572. srcs4[0]++;
  1573. srcs4[1]++;
  1574. srcs5[0]++;
  1575. srcs5[1]++;
  1576. srcs6[0]++;
  1577. srcs6[1]++;
  1578. srcs7[0]++;
  1579. srcs7[1]++;
  1580. srcs8[0]++;
  1581. srcs8[1]++;
  1582. srcs9[0]++;
  1583. srcs9[1]++;
  1584. srcs10[0]++;
  1585. srcs10[1]++;
  1586. dst++;
  1587. }
  1588. #else
  1589. mix16_2( dst, srcs0, len );
  1590. mix16_2( dst, srcs1, len );
  1591. mix16_2( dst, srcs2, len );
  1592. mix16_2( dst, srcs3, len );
  1593. mix16_2( dst, srcs4, len );
  1594. mix16_2( dst, srcs5, len );
  1595. mix16_2( dst, srcs6, len );
  1596. mix16_2( dst, srcs7, len );
  1597. mix16_2( dst, srcs8, len );
  1598. mix16_2( dst, srcs9, len );
  1599. mix16_2( dst, srcs10, len );
  1600. #endif
  1601. return;
  1602. }
  1603. void MixAudio16_23(ALshort *dst, alMixEntry *entries) {
  1604. ALshort *srcs0[2];
  1605. ALshort *srcs1[2];
  1606. ALshort *srcs2[2];
  1607. ALshort *srcs3[2];
  1608. ALshort *srcs4[2];
  1609. ALshort *srcs5[2];
  1610. ALshort *srcs6[2];
  1611. ALshort *srcs7[2];
  1612. ALshort *srcs8[2];
  1613. ALshort *srcs9[2];
  1614. ALshort *srcs10[2];
  1615. ALshort *srcs11;
  1616. int len;
  1617. #ifndef MMX_SUPPORT
  1618. int sample;
  1619. #endif
  1620. len = entries[0].bytes;
  1621. len /= sizeof(ALshort);
  1622. srcs0[0] = entries[0].data;
  1623. srcs0[1] = entries[1].data;
  1624. srcs1[0] = entries[2].data;
  1625. srcs1[1] = entries[3].data;
  1626. srcs2[0] = entries[4].data;
  1627. srcs2[1] = entries[5].data;
  1628. srcs3[0] = entries[6].data;
  1629. srcs3[1] = entries[7].data;
  1630. srcs4[0] = entries[8].data;
  1631. srcs4[1] = entries[9].data;
  1632. srcs5[0] = entries[10].data;
  1633. srcs5[1] = entries[11].data;
  1634. srcs6[0] = entries[12].data;
  1635. srcs6[1] = entries[13].data;
  1636. srcs7[0] = entries[14].data;
  1637. srcs7[1] = entries[15].data;
  1638. srcs8[0] = entries[16].data;
  1639. srcs8[1] = entries[17].data;
  1640. srcs9[0] = entries[18].data;
  1641. srcs9[1] = entries[19].data;
  1642. srcs10[0] = entries[20].data;
  1643. srcs10[1] = entries[21].data;
  1644. srcs11 = entries[22].data;
  1645. #ifndef MMX_SUPPORT
  1646. while(len--) {
  1647. sample = *dst;
  1648. sample = *srcs0[0];
  1649. sample += *srcs0[1];
  1650. sample += *srcs1[0];
  1651. sample += *srcs1[1];
  1652. sample += *srcs2[0];
  1653. sample += *srcs2[1];
  1654. sample += *srcs3[0];
  1655. sample += *srcs3[1];
  1656. sample += *srcs4[0];
  1657. sample += *srcs4[1];
  1658. sample += *srcs5[0];
  1659. sample += *srcs5[1];
  1660. sample += *srcs6[0];
  1661. sample += *srcs6[1];
  1662. sample += *srcs7[0];
  1663. sample += *srcs7[1];
  1664. sample += *srcs8[0];
  1665. sample += *srcs8[1];
  1666. sample += *srcs9[0];
  1667. sample += *srcs9[1];
  1668. sample += *srcs10[0];
  1669. sample += *srcs10[1];
  1670. sample += *srcs11;
  1671. if(sample > max_audioval ) {
  1672. *dst = max_audioval;
  1673. } else if(sample < min_audioval ) {
  1674. *dst = min_audioval;
  1675. } else {
  1676. *dst = sample;
  1677. }
  1678. srcs0[0]++;
  1679. srcs0[1]++;
  1680. srcs1[0]++;
  1681. srcs1[1]++;
  1682. srcs2[0]++;
  1683. srcs2[1]++;
  1684. srcs3[0]++;
  1685. srcs3[1]++;
  1686. srcs4[0]++;
  1687. srcs4[1]++;
  1688. srcs5[0]++;
  1689. srcs5[1]++;
  1690. srcs6[0]++;
  1691. srcs6[1]++;
  1692. srcs7[0]++;
  1693. srcs7[1]++;
  1694. srcs8[0]++;
  1695. srcs8[1]++;
  1696. srcs9[0]++;
  1697. srcs9[1]++;
  1698. srcs10[0]++;
  1699. srcs10[1]++;
  1700. srcs11++;
  1701. dst++;
  1702. }
  1703. #else
  1704. mix16_2( dst, srcs0, len );
  1705. mix16_2( dst, srcs1, len );
  1706. mix16_2( dst, srcs2, len );
  1707. mix16_2( dst, srcs3, len );
  1708. mix16_2( dst, srcs4, len );
  1709. mix16_2( dst, srcs5, len );
  1710. mix16_2( dst, srcs6, len );
  1711. mix16_2( dst, srcs7, len );
  1712. mix16_2( dst, srcs8, len );
  1713. mix16_2( dst, srcs9, len );
  1714. mix16_2( dst, srcs10, len );
  1715. mix16_1( dst, srcs11, len );
  1716. #endif
  1717. return;
  1718. }
  1719. void MixAudio16_24(ALshort *dst, alMixEntry *entries) {
  1720. ALshort *srcs0[2];
  1721. ALshort *srcs1[2];
  1722. ALshort *srcs2[2];
  1723. ALshort *srcs3[2];
  1724. ALshort *srcs4[2];
  1725. ALshort *srcs5[2];
  1726. ALshort *srcs6[2];
  1727. ALshort *srcs7[2];
  1728. ALshort *srcs8[2];
  1729. ALshort *srcs9[2];
  1730. ALshort *srcs10[2];
  1731. ALshort *srcs11[2];
  1732. int len;
  1733. #ifndef MMX_SUPPORT
  1734. int sample;
  1735. #endif
  1736. len = entries[0].bytes;
  1737. len /= sizeof(ALshort);
  1738. srcs0[0] = entries[0].data;
  1739. srcs0[1] = entries[1].data;
  1740. srcs1[0] = entries[2].data;
  1741. srcs1[1] = entries[3].data;
  1742. srcs2[0] = entries[4].data;
  1743. srcs2[1] = entries[5].data;
  1744. srcs3[0] = entries[6].data;
  1745. srcs3[1] = entries[7].data;
  1746. srcs4[0] = entries[8].data;
  1747. srcs4[1] = entries[9].data;
  1748. srcs5[0] = entries[10].data;
  1749. srcs5[1] = entries[11].data;
  1750. srcs6[0] = entries[12].data;
  1751. srcs6[1] = entries[13].data;
  1752. srcs7[0] = entries[14].data;
  1753. srcs7[1] = entries[15].data;
  1754. srcs8[0] = entries[16].data;
  1755. srcs8[1] = entries[17].data;
  1756. srcs9[0] = entries[18].data;
  1757. srcs9[1] = entries[19].data;
  1758. srcs10[0] = entries[20].data;
  1759. srcs10[1] = entries[21].data;
  1760. srcs11[0] = entries[22].data;
  1761. srcs11[1] = entries[23].data;
  1762. #ifndef MMX_SUPPORT
  1763. while(len--) {
  1764. sample = *dst;
  1765. sample = *srcs0[0];
  1766. sample += *srcs0[1];
  1767. sample += *srcs1[0];
  1768. sample += *srcs1[1];
  1769. sample += *srcs2[0];
  1770. sample += *srcs2[1];
  1771. sample += *srcs3[0];
  1772. sample += *srcs3[1];
  1773. sample += *srcs4[0];
  1774. sample += *srcs4[1];
  1775. sample += *srcs5[0];
  1776. sample += *srcs5[1];
  1777. sample += *srcs6[0];
  1778. sample += *srcs6[1];
  1779. sample += *srcs7[0];
  1780. sample += *srcs7[1];
  1781. sample += *srcs8[0];
  1782. sample += *srcs8[1];
  1783. sample += *srcs9[0];
  1784. sample += *srcs9[1];
  1785. sample += *srcs10[0];
  1786. sample += *srcs10[1];
  1787. sample += *srcs11[0];
  1788. sample += *srcs11[1];
  1789. if(sample > max_audioval ) {
  1790. *dst = max_audioval;
  1791. } else if(sample < min_audioval ) {
  1792. *dst = min_audioval;
  1793. } else {
  1794. *dst = sample;
  1795. }
  1796. srcs0[0]++;
  1797. srcs0[1]++;
  1798. srcs1[0]++;
  1799. srcs1[1]++;
  1800. srcs2[0]++;
  1801. srcs2[1]++;
  1802. srcs3[0]++;
  1803. srcs3[1]++;
  1804. srcs4[0]++;
  1805. srcs4[1]++;
  1806. srcs5[0]++;
  1807. srcs5[1]++;
  1808. srcs6[0]++;
  1809. srcs6[1]++;
  1810. srcs7[0]++;
  1811. srcs7[1]++;
  1812. srcs8[0]++;
  1813. srcs8[1]++;
  1814. srcs9[0]++;
  1815. srcs9[1]++;
  1816. srcs10[0]++;
  1817. srcs10[1]++;
  1818. srcs11[0]++;
  1819. srcs11[1]++;
  1820. dst++;
  1821. }
  1822. #else
  1823. mix16_2( dst, srcs0, len );
  1824. mix16_2( dst, srcs1, len );
  1825. mix16_2( dst, srcs2, len );
  1826. mix16_2( dst, srcs3, len );
  1827. mix16_2( dst, srcs4, len );
  1828. mix16_2( dst, srcs5, len );
  1829. mix16_2( dst, srcs6, len );
  1830. mix16_2( dst, srcs7, len );
  1831. mix16_2( dst, srcs8, len );
  1832. mix16_2( dst, srcs9, len );
  1833. mix16_2( dst, srcs10, len );
  1834. mix16_2( dst, srcs11, len );
  1835. #endif
  1836. return;
  1837. }
  1838. void MixAudio16_25(ALshort *dst, alMixEntry *entries) {
  1839. ALshort *srcs0[2];
  1840. ALshort *srcs1[2];
  1841. ALshort *srcs2[2];
  1842. ALshort *srcs3[2];
  1843. ALshort *srcs4[2];
  1844. ALshort *srcs5[2];
  1845. ALshort *srcs6[2];
  1846. ALshort *srcs7[2];
  1847. ALshort *srcs8[2];
  1848. ALshort *srcs9[2];
  1849. ALshort *srcs10[2];
  1850. ALshort *srcs11[2];
  1851. ALshort *srcs12;
  1852. int len;
  1853. #ifndef MMX_SUPPORT
  1854. int sample;
  1855. #endif
  1856. len = entries[0].bytes;
  1857. len /= sizeof(ALshort);
  1858. srcs0[0] = entries[0].data;
  1859. srcs0[1] = entries[1].data;
  1860. srcs1[0] = entries[2].data;
  1861. srcs1[1] = entries[3].data;
  1862. srcs2[0] = entries[4].data;
  1863. srcs2[1] = entries[5].data;
  1864. srcs3[0] = entries[6].data;
  1865. srcs3[1] = entries[7].data;
  1866. srcs4[0] = entries[8].data;
  1867. srcs4[1] = entries[9].data;
  1868. srcs5[0] = entries[10].data;
  1869. srcs5[1] = entries[11].data;
  1870. srcs6[0] = entries[12].data;
  1871. srcs6[1] = entries[13].data;
  1872. srcs7[0] = entries[14].data;
  1873. srcs7[1] = entries[15].data;
  1874. srcs8[0] = entries[16].data;
  1875. srcs8[1] = entries[17].data;
  1876. srcs9[0] = entries[18].data;
  1877. srcs9[1] = entries[19].data;
  1878. srcs10[0] = entries[20].data;
  1879. srcs10[1] = entries[21].data;
  1880. srcs11[0] = entries[22].data;
  1881. srcs11[1] = entries[23].data;
  1882. srcs12 = entries[24].data;
  1883. #ifndef MMX_SUPPORT
  1884. while(len--) {
  1885. sample = *dst;
  1886. sample = *srcs0[0];
  1887. sample += *srcs0[1];
  1888. sample += *srcs1[0];
  1889. sample += *srcs1[1];
  1890. sample += *srcs2[0];
  1891. sample += *srcs2[1];
  1892. sample += *srcs3[0];
  1893. sample += *srcs3[1];
  1894. sample += *srcs4[0];
  1895. sample += *srcs4[1];
  1896. sample += *srcs5[0];
  1897. sample += *srcs5[1];
  1898. sample += *srcs6[0];
  1899. sample += *srcs6[1];
  1900. sample += *srcs7[0];
  1901. sample += *srcs7[1];
  1902. sample += *srcs8[0];
  1903. sample += *srcs8[1];
  1904. sample += *srcs9[0];
  1905. sample += *srcs9[1];
  1906. sample += *srcs10[0];
  1907. sample += *srcs10[1];
  1908. sample += *srcs11[0];
  1909. sample += *srcs11[1];
  1910. sample += *srcs12;
  1911. if(sample > max_audioval ) {
  1912. *dst = max_audioval;
  1913. } else if(sample < min_audioval ) {
  1914. *dst = min_audioval;
  1915. } else {
  1916. *dst = sample;
  1917. }
  1918. srcs0[0]++;
  1919. srcs0[1]++;
  1920. srcs1[0]++;
  1921. srcs1[1]++;
  1922. srcs2[0]++;
  1923. srcs2[1]++;
  1924. srcs3[0]++;
  1925. srcs3[1]++;
  1926. srcs4[0]++;
  1927. srcs4[1]++;
  1928. srcs5[0]++;
  1929. srcs5[1]++;
  1930. srcs6[0]++;
  1931. srcs6[1]++;
  1932. srcs7[0]++;
  1933. srcs7[1]++;
  1934. srcs8[0]++;
  1935. srcs8[1]++;
  1936. srcs9[0]++;
  1937. srcs9[1]++;
  1938. srcs10[0]++;
  1939. srcs10[1]++;
  1940. srcs11[0]++;
  1941. srcs11[1]++;
  1942. srcs12++;
  1943. dst++;
  1944. }
  1945. #else
  1946. mix16_2( dst, srcs0, len );
  1947. mix16_2( dst, srcs1, len );
  1948. mix16_2( dst, srcs2, len );
  1949. mix16_2( dst, srcs3, len );
  1950. mix16_2( dst, srcs4, len );
  1951. mix16_2( dst, srcs5, len );
  1952. mix16_2( dst, srcs6, len );
  1953. mix16_2( dst, srcs7, len );
  1954. mix16_2( dst, srcs8, len );
  1955. mix16_2( dst, srcs9, len );
  1956. mix16_2( dst, srcs10, len );
  1957. mix16_2( dst, srcs11, len );
  1958. mix16_1( dst, srcs12, len );
  1959. #endif
  1960. return;
  1961. }
  1962. void MixAudio16_26(ALshort *dst, alMixEntry *entries) {
  1963. ALshort *srcs0[2];
  1964. ALshort *srcs1[2];
  1965. ALshort *srcs2[2];
  1966. ALshort *srcs3[2];
  1967. ALshort *srcs4[2];
  1968. ALshort *srcs5[2];
  1969. ALshort *srcs6[2];
  1970. ALshort *srcs7[2];
  1971. ALshort *srcs8[2];
  1972. ALshort *srcs9[2];
  1973. ALshort *srcs10[2];
  1974. ALshort *srcs11[2];
  1975. ALshort *srcs12[2];
  1976. int len;
  1977. #ifndef MMX_SUPPORT
  1978. int sample;
  1979. #endif
  1980. len = entries[0].bytes;
  1981. len /= sizeof(ALshort);
  1982. srcs0[0] = entries[0].data;
  1983. srcs0[1] = entries[1].data;
  1984. srcs1[0] = entries[2].data;
  1985. srcs1[1] = entries[3].data;
  1986. srcs2[0] = entries[4].data;
  1987. srcs2[1] = entries[5].data;
  1988. srcs3[0] = entries[6].data;
  1989. srcs3[1] = entries[7].data;
  1990. srcs4[0] = entries[8].data;
  1991. srcs4[1] = entries[9].data;
  1992. srcs5[0] = entries[10].data;
  1993. srcs5[1] = entries[11].data;
  1994. srcs6[0] = entries[12].data;
  1995. srcs6[1] = entries[13].data;
  1996. srcs7[0] = entries[14].data;
  1997. srcs7[1] = entries[15].data;
  1998. srcs8[0] = entries[16].data;
  1999. srcs8[1] = entries[17].data;
  2000. srcs9[0] = entries[18].data;
  2001. srcs9[1] = entries[19].data;
  2002. srcs10[0] = entries[20].data;
  2003. srcs10[1] = entries[21].data;
  2004. srcs11[0] = entries[22].data;
  2005. srcs11[1] = entries[23].data;
  2006. srcs12[0] = entries[24].data;
  2007. srcs12[1] = entries[25].data;
  2008. #ifndef MMX_SUPPORT
  2009. while(len--) {
  2010. sample = *dst;
  2011. sample = *srcs0[0];
  2012. sample += *srcs0[1];
  2013. sample += *srcs1[0];
  2014. sample += *srcs1[1];
  2015. sample += *srcs2[0];
  2016. sample += *srcs2[1];
  2017. sample += *srcs3[0];
  2018. sample += *srcs3[1];
  2019. sample += *srcs4[0];
  2020. sample += *srcs4[1];
  2021. sample += *srcs5[0];
  2022. sample += *srcs5[1];
  2023. sample += *srcs6[0];
  2024. sample += *srcs6[1];
  2025. sample += *srcs7[0];
  2026. sample += *srcs7[1];
  2027. sample += *srcs8[0];
  2028. sample += *srcs8[1];
  2029. sample += *srcs9[0];
  2030. sample += *srcs9[1];
  2031. sample += *srcs10[0];
  2032. sample += *srcs10[1];
  2033. sample += *srcs11[0];
  2034. sample += *srcs11[1];
  2035. sample += *srcs12[0];
  2036. sample += *srcs12[1];
  2037. if(sample > max_audioval ) {
  2038. *dst = max_audioval;
  2039. } else if(sample < min_audioval ) {
  2040. *dst = min_audioval;
  2041. } else {
  2042. *dst = sample;
  2043. }
  2044. srcs0[0]++;
  2045. srcs0[1]++;
  2046. srcs1[0]++;
  2047. srcs1[1]++;
  2048. srcs2[0]++;
  2049. srcs2[1]++;
  2050. srcs3[0]++;
  2051. srcs3[1]++;
  2052. srcs4[0]++;
  2053. srcs4[1]++;
  2054. srcs5[0]++;
  2055. srcs5[1]++;
  2056. srcs6[0]++;
  2057. srcs6[1]++;
  2058. srcs7[0]++;
  2059. srcs7[1]++;
  2060. srcs8[0]++;
  2061. srcs8[1]++;
  2062. srcs9[0]++;
  2063. srcs9[1]++;
  2064. srcs10[0]++;
  2065. srcs10[1]++;
  2066. srcs11[0]++;
  2067. srcs11[1]++;
  2068. srcs12[0]++;
  2069. srcs12[1]++;
  2070. dst++;
  2071. }
  2072. #else
  2073. mix16_2( dst, srcs0, len );
  2074. mix16_2( dst, srcs1, len );
  2075. mix16_2( dst, srcs2, len );
  2076. mix16_2( dst, srcs3, len );
  2077. mix16_2( dst, srcs4, len );
  2078. mix16_2( dst, srcs5, len );
  2079. mix16_2( dst, srcs6, len );
  2080. mix16_2( dst, srcs7, len );
  2081. mix16_2( dst, srcs8, len );
  2082. mix16_2( dst, srcs9, len );
  2083. mix16_2( dst, srcs10, len );
  2084. mix16_2( dst, srcs11, len );
  2085. mix16_2( dst, srcs12, len );
  2086. #endif
  2087. return;
  2088. }
  2089. void MixAudio16_27(ALshort *dst, alMixEntry *entries) {
  2090. ALshort *srcs0[2];
  2091. ALshort *srcs1[2];
  2092. ALshort *srcs2[2];
  2093. ALshort *srcs3[2];
  2094. ALshort *srcs4[2];
  2095. ALshort *srcs5[2];
  2096. ALshort *srcs6[2];
  2097. ALshort *srcs7[2];
  2098. ALshort *srcs8[2];
  2099. ALshort *srcs9[2];
  2100. ALshort *srcs10[2];
  2101. ALshort *srcs11[2];
  2102. ALshort *srcs12[2];
  2103. ALshort *srcs13;
  2104. int len;
  2105. #ifndef MMX_SUPPORT
  2106. int sample;
  2107. #endif
  2108. len = entries[0].bytes;
  2109. len /= sizeof(ALshort);
  2110. srcs0[0] = entries[0].data;
  2111. srcs0[1] = entries[1].data;
  2112. srcs1[0] = entries[2].data;
  2113. srcs1[1] = entries[3].data;
  2114. srcs2[0] = entries[4].data;
  2115. srcs2[1] = entries[5].data;
  2116. srcs3[0] = entries[6].data;
  2117. srcs3[1] = entries[7].data;
  2118. srcs4[0] = entries[8].data;
  2119. srcs4[1] = entries[9].data;
  2120. srcs5[0] = entries[10].data;
  2121. srcs5[1] = entries[11].data;
  2122. srcs6[0] = entries[12].data;
  2123. srcs6[1] = entries[13].data;
  2124. srcs7[0] = entries[14].data;
  2125. srcs7[1] = entries[15].data;
  2126. srcs8[0] = entries[16].data;
  2127. srcs8[1] = entries[17].data;
  2128. srcs9[0] = entries[18].data;
  2129. srcs9[1] = entries[19].data;
  2130. srcs10[0] = entries[20].data;
  2131. srcs10[1] = entries[21].data;
  2132. srcs11[0] = entries[22].data;
  2133. srcs11[1] = entries[23].data;
  2134. srcs12[0] = entries[24].data;
  2135. srcs12[1] = entries[25].data;
  2136. srcs13 = entries[26].data;
  2137. #ifndef MMX_SUPPORT
  2138. while(len--) {
  2139. sample = *dst;
  2140. sample = *srcs0[0];
  2141. sample += *srcs0[1];
  2142. sample += *srcs1[0];
  2143. sample += *srcs1[1];
  2144. sample += *srcs2[0];
  2145. sample += *srcs2[1];
  2146. sample += *srcs3[0];
  2147. sample += *srcs3[1];
  2148. sample += *srcs4[0];
  2149. sample += *srcs4[1];
  2150. sample += *srcs5[0];
  2151. sample += *srcs5[1];
  2152. sample += *srcs6[0];
  2153. sample += *srcs6[1];
  2154. sample += *srcs7[0];
  2155. sample += *srcs7[1];
  2156. sample += *srcs8[0];
  2157. sample += *srcs8[1];
  2158. sample += *srcs9[0];
  2159. sample += *srcs9[1];
  2160. sample += *srcs10[0];
  2161. sample += *srcs10[1];
  2162. sample += *srcs11[0];
  2163. sample += *srcs11[1];
  2164. sample += *srcs12[0];
  2165. sample += *srcs12[1];
  2166. sample += *srcs13;
  2167. if(sample > max_audioval ) {
  2168. *dst = max_audioval;
  2169. } else if(sample < min_audioval ) {
  2170. *dst = min_audioval;
  2171. } else {
  2172. *dst = sample;
  2173. }
  2174. srcs0[0]++;
  2175. srcs0[1]++;
  2176. srcs1[0]++;
  2177. srcs1[1]++;
  2178. srcs2[0]++;
  2179. srcs2[1]++;
  2180. srcs3[0]++;
  2181. srcs3[1]++;
  2182. srcs4[0]++;
  2183. srcs4[1]++;
  2184. srcs5[0]++;
  2185. srcs5[1]++;
  2186. srcs6[0]++;
  2187. srcs6[1]++;
  2188. srcs7[0]++;
  2189. srcs7[1]++;
  2190. srcs8[0]++;
  2191. srcs8[1]++;
  2192. srcs9[0]++;
  2193. srcs9[1]++;
  2194. srcs10[0]++;
  2195. srcs10[1]++;
  2196. srcs11[0]++;
  2197. srcs11[1]++;
  2198. srcs12[0]++;
  2199. srcs12[1]++;
  2200. srcs13++;
  2201. dst++;
  2202. }
  2203. #else
  2204. mix16_2( dst, srcs0, len );
  2205. mix16_2( dst, srcs1, len );
  2206. mix16_2( dst, srcs2, len );
  2207. mix16_2( dst, srcs3, len );
  2208. mix16_2( dst, srcs4, len );
  2209. mix16_2( dst, srcs5, len );
  2210. mix16_2( dst, srcs6, len );
  2211. mix16_2( dst, srcs7, len );
  2212. mix16_2( dst, srcs8, len );
  2213. mix16_2( dst, srcs9, len );
  2214. mix16_2( dst, srcs10, len );
  2215. mix16_2( dst, srcs11, len );
  2216. mix16_2( dst, srcs12, len );
  2217. mix16_1( dst, srcs13, len );
  2218. #endif
  2219. return;
  2220. }
  2221. void MixAudio16_28(ALshort *dst, alMixEntry *entries) {
  2222. ALshort *srcs0[2];
  2223. ALshort *srcs1[2];
  2224. ALshort *srcs2[2];
  2225. ALshort *srcs3[2];
  2226. ALshort *srcs4[2];
  2227. ALshort *srcs5[2];
  2228. ALshort *srcs6[2];
  2229. ALshort *srcs7[2];
  2230. ALshort *srcs8[2];
  2231. ALshort *srcs9[2];
  2232. ALshort *srcs10[2];
  2233. ALshort *srcs11[2];
  2234. ALshort *srcs12[2];
  2235. ALshort *srcs13[2];
  2236. int len;
  2237. #ifndef MMX_SUPPORT
  2238. int sample;
  2239. #endif
  2240. len = entries[0].bytes;
  2241. len /= sizeof(ALshort);
  2242. srcs0[0] = entries[0].data;
  2243. srcs0[1] = entries[1].data;
  2244. srcs1[0] = entries[2].data;
  2245. srcs1[1] = entries[3].data;
  2246. srcs2[0] = entries[4].data;
  2247. srcs2[1] = entries[5].data;
  2248. srcs3[0] = entries[6].data;
  2249. srcs3[1] = entries[7].data;
  2250. srcs4[0] = entries[8].data;
  2251. srcs4[1] = entries[9].data;
  2252. srcs5[0] = entries[10].data;
  2253. srcs5[1] = entries[11].data;
  2254. srcs6[0] = entries[12].data;
  2255. srcs6[1] = entries[13].data;
  2256. srcs7[0] = entries[14].data;
  2257. srcs7[1] = entries[15].data;
  2258. srcs8[0] = entries[16].data;
  2259. srcs8[1] = entries[17].data;
  2260. srcs9[0] = entries[18].data;
  2261. srcs9[1] = entries[19].data;
  2262. srcs10[0] = entries[20].data;
  2263. srcs10[1] = entries[21].data;
  2264. srcs11[0] = entries[22].data;
  2265. srcs11[1] = entries[23].data;
  2266. srcs12[0] = entries[24].data;
  2267. srcs12[1] = entries[25].data;
  2268. srcs13[0] = entries[26].data;
  2269. srcs13[1] = entries[27].data;
  2270. #ifndef MMX_SUPPORT
  2271. while(len--) {
  2272. sample = *dst;
  2273. sample = *srcs0[0];
  2274. sample += *srcs0[1];
  2275. sample += *srcs1[0];
  2276. sample += *srcs1[1];
  2277. sample += *srcs2[0];
  2278. sample += *srcs2[1];
  2279. sample += *srcs3[0];
  2280. sample += *srcs3[1];
  2281. sample += *srcs4[0];
  2282. sample += *srcs4[1];
  2283. sample += *srcs5[0];
  2284. sample += *srcs5[1];
  2285. sample += *srcs6[0];
  2286. sample += *srcs6[1];
  2287. sample += *srcs7[0];
  2288. sample += *srcs7[1];
  2289. sample += *srcs8[0];
  2290. sample += *srcs8[1];
  2291. sample += *srcs9[0];
  2292. sample += *srcs9[1];
  2293. sample += *srcs10[0];
  2294. sample += *srcs10[1];
  2295. sample += *srcs11[0];
  2296. sample += *srcs11[1];
  2297. sample += *srcs12[0];
  2298. sample += *srcs12[1];
  2299. sample += *srcs13[0];
  2300. sample += *srcs13[1];
  2301. if(sample > max_audio