1 diff -ur openal-soft-1.15.1.orig/Alc/ALu.c openal-soft-1.15.1/Alc/ALu.c
2 --- openal-soft-1.15.1.orig/Alc/ALu.c 2014-07-02 03:36:17.874323362 +0300
3 +++ openal-soft-1.15.1/Alc/ALu.c 2014-07-03 02:41:18.000116397 +0300
5 return SamplesToDo*numchans*sizeof(T); \
8 +static int Write_ALshort(ALCdevice *device, ALshort *RESTRICT buffer, ALuint SamplesToDo)
10 + ALfloat (*RESTRICT DryBuffer)[BUFFERSIZE] = device->DryBuffer;
11 + ALuint numchans = ChannelsFromDevFmt(device->FmtChans);
12 + const ALuint *offsets = device->ChannelOffsets;
16 + if (numchans == 2 && offsets[0] == 0 && offsets[1] == 1)
18 + ALfloat *cl = DryBuffer[0];
19 + ALfloat *cr = DryBuffer[1];
20 + ALuint samples = SamplesToDo;
22 + "movw r3, #0x0000fe00\n"
23 + "movt r3, #0x46ff\n"
24 + "vdup.32 d4, r3 @ 32767.0\n"
26 + "vld1.32 {q0}, [%1, :128]!\n"
27 + "vld1.32 {q1}, [%2, :128]!\n"
29 + "vmul.f32 q0, d4[0]\n"
30 + "vmul.f32 q1, d4[0]\n"
31 + "vcvt.s32.f32 q0, q0\n"
32 + "vcvt.s32.f32 q1, q1\n"
35 + "vqmovn.s32 d0, q0\n"
36 + "vqmovn.s32 d1, q1\n"
38 + "vst2.16 {d0,d1}, [%0]!\n"
41 + "b 2f\n" /* eq 4 - all done */
45 + "vst1.32 {d0[0]}, [%0]!\n"
48 + "vst1.32 {d0[1]}, [%0]!\n"
51 + "vst1.32 {d1[0]}, [%0]!\n"
53 + : "=&r"(buffer), "=&r"(cl), "=&r"(cr), "=&r"(samples)
54 + : "0"(buffer), "1"(cl), "2"(cr), "3"(samples)
55 + : "r3", "q0", "q1", "d4", "cc", "memory"
57 + return SamplesToDo * numchans * sizeof(ALshort);
61 + for(j = 0;j < MaxChannels;j++)
63 + ALshort *RESTRICT out;
65 + if(offsets[j] == INVALID_OFFSET)
68 + out = buffer + offsets[j];
69 + for(i = 0;i < SamplesToDo;i++)
70 + out[i * numchans] = aluF2S(DryBuffer[j][i]);
72 + return SamplesToDo * numchans * sizeof(ALshort);
75 DECL_TEMPLATE(ALfloat, aluF2F)
76 DECL_TEMPLATE(ALuint, aluF2UI)
77 DECL_TEMPLATE(ALint, aluF2I)
78 DECL_TEMPLATE(ALushort, aluF2US)
79 -DECL_TEMPLATE(ALshort, aluF2S)
80 +//DECL_TEMPLATE(ALshort, aluF2S)
81 DECL_TEMPLATE(ALubyte, aluF2UB)
82 DECL_TEMPLATE(ALbyte, aluF2B)