Changeset 68 for libmpcdec/branches/zorg/src/synth_filter.c
- Timestamp:
- 10/06/06 17:14:05 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libmpcdec/branches/zorg/src/synth_filter.c
r10 r68 32 32 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 33 */ 34 35 34 /// \file synth_filter.c 36 35 /// Synthesis functions. 37 36 /// \todo document me 38 37 #include <string.h> 39 38 #include <mpcdec/mpcdec.h> 40 #include <mpcdec/internal.h> 39 #include "decoder.h" 40 #include "math.h" 41 41 42 42 /* C O N S T A N T S */ 43 #define MPC_FIXED_POINT_SYNTH_FIX 2 44 43 45 #undef _ 44 45 #define MPC_FIXED_POINT_SYNTH_FIX 246 47 46 #ifdef MPC_FIXED_POINT 48 47 #define _(value) MPC_MAKE_FRACT_CONST((double)value/(double)(0x40000)) … … 89 88 #undef _ 90 89 91 static void Calculate_New_V ( const MPC_SAMPLE_FORMAT * Sample, MPC_SAMPLE_FORMAT * V ) 90 static void 91 mpc_compute_new_V(const MPC_SAMPLE_FORMAT* p_sample, MPC_SAMPLE_FORMAT* pV) 92 92 { 93 93 // Calculating new V-buffer values for left channel 94 94 // calculate new V-values (ISO-11172-3, p. 39) 95 95 // based upon fast-MDCT algorithm by Byeong Gi Lee 96 /*static*/MPC_SAMPLE_FORMAT A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15;97 /*static*/MPC_SAMPLE_FORMAT B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15;96 MPC_SAMPLE_FORMAT A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15; 97 MPC_SAMPLE_FORMAT B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15; 98 98 MPC_SAMPLE_FORMAT tmp; 99 99 100 A00 = Sample[ 0] + Sample[31];101 A01 = Sample[ 1] + Sample[30];102 A02 = Sample[ 2] + Sample[29];103 A03 = Sample[ 3] + Sample[28];104 A04 = Sample[ 4] + Sample[27];105 A05 = Sample[ 5] + Sample[26];106 A06 = Sample[ 6] + Sample[25];107 A07 = Sample[ 7] + Sample[24];108 A08 = Sample[ 8] + Sample[23];109 A09 = Sample[ 9] + Sample[22];110 A10 = Sample[10] + Sample[21];111 A11 = Sample[11] + Sample[20];112 A12 = Sample[12] + Sample[19];113 A13 = Sample[13] + Sample[18];114 A14 = Sample[14] + Sample[17];115 A15 = Sample[15] + Sample[16];100 A00 = p_sample[ 0] + p_sample[31]; 101 A01 = p_sample[ 1] + p_sample[30]; 102 A02 = p_sample[ 2] + p_sample[29]; 103 A03 = p_sample[ 3] + p_sample[28]; 104 A04 = p_sample[ 4] + p_sample[27]; 105 A05 = p_sample[ 5] + p_sample[26]; 106 A06 = p_sample[ 6] + p_sample[25]; 107 A07 = p_sample[ 7] + p_sample[24]; 108 A08 = p_sample[ 8] + p_sample[23]; 109 A09 = p_sample[ 9] + p_sample[22]; 110 A10 = p_sample[10] + p_sample[21]; 111 A11 = p_sample[11] + p_sample[20]; 112 A12 = p_sample[12] + p_sample[19]; 113 A13 = p_sample[13] + p_sample[18]; 114 A14 = p_sample[14] + p_sample[17]; 115 A15 = p_sample[15] + p_sample[16]; 116 116 117 117 B00 = A00 + A15; … … 183 183 A15 = MPC_MULTIPLY_FRACT_CONST_FIX((B14 - B15) , 0.7071067691f , 1); 184 184 185 V[48] = -A00;186 V[ 0] = A01;187 V[40] = -A02 - (V[ 8] = A03);188 V[36] = -((V[ 4] = A05 + (V[12] = A07)) + A06);189 V[44] = - A04 - A06 - A07;190 V[ 6] = (V[10] = A11 + (V[14] = A15)) + A13;191 V[38] = (V[34] = -(V[ 2] = A09 + A13 + A15) - A14) + A09 - A10 - A11;192 V[46] = (tmp = -(A12 + A14 + A15)) - A08;193 V[42] = tmp - A10 - A11;194 195 A00 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 0] - Sample[31]) , 0.5006030202f , MPC_FIXED_POINT_SYNTH_FIX);196 A01 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 1] - Sample[30]) , 0.5054709315f , MPC_FIXED_POINT_SYNTH_FIX);197 A02 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 2] - Sample[29]) , 0.5154473186f , MPC_FIXED_POINT_SYNTH_FIX);198 A03 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 3] - Sample[28]) , 0.5310425758f , MPC_FIXED_POINT_SYNTH_FIX);199 A04 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 4] - Sample[27]) , 0.5531039238f , MPC_FIXED_POINT_SYNTH_FIX);200 A05 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 5] - Sample[26]) , 0.5829349756f , MPC_FIXED_POINT_SYNTH_FIX);201 A06 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 6] - Sample[25]) , 0.6225041151f , MPC_FIXED_POINT_SYNTH_FIX);202 A07 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 7] - Sample[24]) , 0.6748083234f , MPC_FIXED_POINT_SYNTH_FIX);203 A08 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 8] - Sample[23]) , 0.7445362806f , MPC_FIXED_POINT_SYNTH_FIX);204 A09 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[ 9] - Sample[22]) , 0.8393496275f , MPC_FIXED_POINT_SYNTH_FIX);205 A10 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[10] - Sample[21]) , 0.9725682139f , MPC_FIXED_POINT_SYNTH_FIX);185 pV[48] = -A00; 186 pV[ 0] = A01; 187 pV[40] = -A02 - (pV[ 8] = A03); 188 pV[36] = -((pV[ 4] = A05 + (pV[12] = A07)) + A06); 189 pV[44] = - A04 - A06 - A07; 190 pV[ 6] = (pV[10] = A11 + (pV[14] = A15)) + A13; 191 pV[38] = (pV[34] = -(pV[ 2] = A09 + A13 + A15) - A14) + A09 - A10 - A11; 192 pV[46] = (tmp = -(A12 + A14 + A15)) - A08; 193 pV[42] = tmp - A10 - A11; 194 195 A00 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 0] - p_sample[31]) , 0.5006030202f , MPC_FIXED_POINT_SYNTH_FIX); 196 A01 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 1] - p_sample[30]) , 0.5054709315f , MPC_FIXED_POINT_SYNTH_FIX); 197 A02 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 2] - p_sample[29]) , 0.5154473186f , MPC_FIXED_POINT_SYNTH_FIX); 198 A03 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 3] - p_sample[28]) , 0.5310425758f , MPC_FIXED_POINT_SYNTH_FIX); 199 A04 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 4] - p_sample[27]) , 0.5531039238f , MPC_FIXED_POINT_SYNTH_FIX); 200 A05 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 5] - p_sample[26]) , 0.5829349756f , MPC_FIXED_POINT_SYNTH_FIX); 201 A06 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 6] - p_sample[25]) , 0.6225041151f , MPC_FIXED_POINT_SYNTH_FIX); 202 A07 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 7] - p_sample[24]) , 0.6748083234f , MPC_FIXED_POINT_SYNTH_FIX); 203 A08 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 8] - p_sample[23]) , 0.7445362806f , MPC_FIXED_POINT_SYNTH_FIX); 204 A09 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[ 9] - p_sample[22]) , 0.8393496275f , MPC_FIXED_POINT_SYNTH_FIX); 205 A10 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[10] - p_sample[21]) , 0.9725682139f , MPC_FIXED_POINT_SYNTH_FIX); 206 206 #if MPC_FIXED_POINT_SYNTH_FIX>=2 207 A11 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[11] - Sample[20]) , 1.1694399118f , MPC_FIXED_POINT_SYNTH_FIX);208 A12 = MPC_MULTIPLY_FRACT_CONST_SHR(( Sample[12] - Sample[19]) , 1.4841645956f , MPC_FIXED_POINT_SYNTH_FIX);207 A11 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[11] - p_sample[20]) , 1.1694399118f , MPC_FIXED_POINT_SYNTH_FIX); 208 A12 = MPC_MULTIPLY_FRACT_CONST_SHR((p_sample[12] - p_sample[19]) , 1.4841645956f , MPC_FIXED_POINT_SYNTH_FIX); 209 209 #else 210 A11 = MPC_SCALE_CONST_SHR (( Sample[11] - Sample[20]) , 1.1694399118f , 30, MPC_FIXED_POINT_SYNTH_FIX);211 A12 = MPC_SCALE_CONST_SHR (( Sample[12] - Sample[19]) , 1.4841645956f , 30, MPC_FIXED_POINT_SYNTH_FIX);210 A11 = MPC_SCALE_CONST_SHR ((p_sample[11] - p_sample[20]) , 1.1694399118f , 30, MPC_FIXED_POINT_SYNTH_FIX); 211 A12 = MPC_SCALE_CONST_SHR ((p_sample[12] - p_sample[19]) , 1.4841645956f , 30, MPC_FIXED_POINT_SYNTH_FIX); 212 212 #endif 213 A13 = MPC_SCALE_CONST_SHR (( Sample[13] - Sample[18]) , 2.0577809811f , 29, MPC_FIXED_POINT_SYNTH_FIX);214 A14 = MPC_SCALE_CONST_SHR (( Sample[14] - Sample[17]) , 3.4076085091f , 29, MPC_FIXED_POINT_SYNTH_FIX);215 A15 = MPC_SCALE_CONST_SHR (( Sample[15] - Sample[16]) , 10.1900081635f, 27 ,MPC_FIXED_POINT_SYNTH_FIX);213 A13 = MPC_SCALE_CONST_SHR ((p_sample[13] - p_sample[18]) , 2.0577809811f , 29, MPC_FIXED_POINT_SYNTH_FIX); 214 A14 = MPC_SCALE_CONST_SHR ((p_sample[14] - p_sample[17]) , 3.4076085091f , 29, MPC_FIXED_POINT_SYNTH_FIX); 215 A15 = MPC_SCALE_CONST_SHR ((p_sample[15] - p_sample[16]) , 10.1900081635f, 27 ,MPC_FIXED_POINT_SYNTH_FIX); 216 216 217 217 B00 = A00 + A15; … … 284 284 285 285 // mehrfach verwendete Ausdrücke: A04+A06+A07, A09+A13+A15 286 V[ 5] = (V[11] = (V[13] = A07 + (V[15] = A15)) + A11) + A05 + A13;287 V[ 7] = (V[ 9] = A03 + A11 + A15) + A13;288 V[33] = -(V[ 1] = A01 + A09 + A13 + A15) - A14;289 V[35] = -(V[ 3] = A05 + A07 + A09 + A13 + A15) - A06 - A14;290 V[37] = (tmp = -(A10 + A11 + A13 + A14 + A15)) - A05 - A06 - A07;291 V[39] = tmp - A02 - A03; // abhängig vom Befehl drüber292 V[41] = (tmp += A13 - A12) - A02 - A03; // abhängig vom Befehl 2 drüber293 V[43] = tmp - A04 - A06 - A07; // abhängig von Befehlen 1 und 3 drüber294 V[47] = (tmp = -(A08 + A12 + A14 + A15)) - A00;295 V[45] = tmp - A04 - A06 - A07; // abhängig vom Befehl drüber296 297 V[32] = -V[ 0];298 V[31] = -V[ 1];299 V[30] = -V[ 2];300 V[29] = -V[ 3];301 V[28] = -V[ 4];302 V[27] = -V[ 5];303 V[26] = -V[ 6];304 V[25] = -V[ 7];305 V[24] = -V[ 8];306 V[23] = -V[ 9];307 V[22] = -V[10];308 V[21] = -V[11];309 V[20] = -V[12];310 V[19] = -V[13];311 V[18] = -V[14];312 V[17] = -V[15];313 314 V[63] =V[33];315 V[62] =V[34];316 V[61] =V[35];317 V[60] =V[36];318 V[59] =V[37];319 V[58] =V[38];320 V[57] =V[39];321 V[56] =V[40];322 V[55] =V[41];323 V[54] =V[42];324 V[53] =V[43];325 V[52] =V[44];326 V[51] =V[45];327 V[50] =V[46];328 V[49] =V[47];286 pV[ 5] = (pV[11] = (pV[13] = A07 + (pV[15] = A15)) + A11) + A05 + A13; 287 pV[ 7] = (pV[ 9] = A03 + A11 + A15) + A13; 288 pV[33] = -(pV[ 1] = A01 + A09 + A13 + A15) - A14; 289 pV[35] = -(pV[ 3] = A05 + A07 + A09 + A13 + A15) - A06 - A14; 290 pV[37] = (tmp = -(A10 + A11 + A13 + A14 + A15)) - A05 - A06 - A07; 291 pV[39] = tmp - A02 - A03; // abhängig vom Befehl drüber 292 pV[41] = (tmp += A13 - A12) - A02 - A03; // abhängig vom Befehl 2 drüber 293 pV[43] = tmp - A04 - A06 - A07; // abhängig von Befehlen 1 und 3 drüber 294 pV[47] = (tmp = -(A08 + A12 + A14 + A15)) - A00; 295 pV[45] = tmp - A04 - A06 - A07; // abhängig vom Befehl drüber 296 297 pV[32] = -pV[ 0]; 298 pV[31] = -pV[ 1]; 299 pV[30] = -pV[ 2]; 300 pV[29] = -pV[ 3]; 301 pV[28] = -pV[ 4]; 302 pV[27] = -pV[ 5]; 303 pV[26] = -pV[ 6]; 304 pV[25] = -pV[ 7]; 305 pV[24] = -pV[ 8]; 306 pV[23] = -pV[ 9]; 307 pV[22] = -pV[10]; 308 pV[21] = -pV[11]; 309 pV[20] = -pV[12]; 310 pV[19] = -pV[13]; 311 pV[18] = -pV[14]; 312 pV[17] = -pV[15]; 313 314 pV[63] = pV[33]; 315 pV[62] = pV[34]; 316 pV[61] = pV[35]; 317 pV[60] = pV[36]; 318 pV[59] = pV[37]; 319 pV[58] = pV[38]; 320 pV[57] = pV[39]; 321 pV[56] = pV[40]; 322 pV[55] = pV[41]; 323 pV[54] = pV[42]; 324 pV[53] = pV[43]; 325 pV[52] = pV[44]; 326 pV[51] = pV[45]; 327 pV[50] = pV[46]; 328 pV[49] = pV[47]; 329 329 } 330 330 331 static void Synthese_Filter_float_internal(MPC_SAMPLE_FORMAT * OutData,MPC_SAMPLE_FORMAT * V,const MPC_SAMPLE_FORMAT * Y) 331 static void 332 mpc_synthese_filter_float_internal(MPC_SAMPLE_FORMAT* p_out, MPC_SAMPLE_FORMAT* pV, const MPC_SAMPLE_FORMAT* pY) 332 333 { 333 334 mpc_uint32_t n; 334 for ( n = 0; n < 36; n++, Y += 32 ) { 335 V -= 64; 336 Calculate_New_V ( Y, V ); 335 for ( n = 0; n < 36; n++, pY += 32 ) 336 { 337 MPC_SAMPLE_FORMAT* pData = p_out; 338 const MPC_SAMPLE_FORMAT* pD = (const MPC_SAMPLE_FORMAT*) &Di_opt; 339 mpc_int32_t k; 340 pV -= 64; 341 mpc_compute_new_V( pY, pV ); 342 for ( k = 0; k < 32; k++, pD += 16, pV++ ) 337 343 { 338 MPC_SAMPLE_FORMAT * Data = OutData; 339 const MPC_SAMPLE_FORMAT * D = (const MPC_SAMPLE_FORMAT *) &Di_opt; 340 mpc_int32_t k; 341 //mpc_int32_t tmp; 342 343 344 345 for ( k = 0; k < 32; k++, D += 16, V++ ) { 346 *Data = MPC_SHL( 347 MPC_MULTIPLY_FRACT(V[ 0],D[ 0]) + MPC_MULTIPLY_FRACT(V[ 96],D[ 1]) + MPC_MULTIPLY_FRACT(V[128],D[ 2]) + MPC_MULTIPLY_FRACT(V[224],D[ 3]) 348 + MPC_MULTIPLY_FRACT(V[256],D[ 4]) + MPC_MULTIPLY_FRACT(V[352],D[ 5]) + MPC_MULTIPLY_FRACT(V[384],D[ 6]) + MPC_MULTIPLY_FRACT(V[480],D[ 7]) 349 + MPC_MULTIPLY_FRACT(V[512],D[ 8]) + MPC_MULTIPLY_FRACT(V[608],D[ 9]) + MPC_MULTIPLY_FRACT(V[640],D[10]) + MPC_MULTIPLY_FRACT(V[736],D[11]) 350 + MPC_MULTIPLY_FRACT(V[768],D[12]) + MPC_MULTIPLY_FRACT(V[864],D[13]) + MPC_MULTIPLY_FRACT(V[896],D[14]) + MPC_MULTIPLY_FRACT(V[992],D[15]) 351 , 2); 352 353 Data += 2; 354 } 355 V -= 32;//bleh 356 OutData+=64; 344 *pData = MPC_SHL( 345 MPC_MULTIPLY_FRACT(pV[ 0], pD[ 0]) + MPC_MULTIPLY_FRACT(pV[ 96], pD[ 1]) + MPC_MULTIPLY_FRACT(pV[128], pD[ 2]) + MPC_MULTIPLY_FRACT(pV[224], pD[ 3]) 346 + MPC_MULTIPLY_FRACT(pV[256], pD[ 4]) + MPC_MULTIPLY_FRACT(pV[352], pD[ 5]) + MPC_MULTIPLY_FRACT(pV[384], pD[ 6]) + MPC_MULTIPLY_FRACT(pV[480], pD[ 7]) 347 + MPC_MULTIPLY_FRACT(pV[512], pD[ 8]) + MPC_MULTIPLY_FRACT(pV[608], pD[ 9]) + MPC_MULTIPLY_FRACT(pV[640], pD[10]) + MPC_MULTIPLY_FRACT(pV[736], pD[11]) 348 + MPC_MULTIPLY_FRACT(pV[768], pD[12]) + MPC_MULTIPLY_FRACT(pV[864], pD[13]) + MPC_MULTIPLY_FRACT(pV[896], pD[14]) + MPC_MULTIPLY_FRACT(pV[992], pD[15]) 349 , 2); 350 pData += 2; 357 351 } 352 pV -= 32; //bleh 353 p_out += 64; 358 354 } 359 355 } 360 356 361 357 void 362 mpc_decoder_synthese_filter_float(mpc_decoder *d, MPC_SAMPLE_FORMAT* OutData)358 mpc_decoder_synthese_filter_float(mpc_decoder* p_dec, MPC_SAMPLE_FORMAT* p_out) 363 359 { 364 360 /********* left channel ********/ 365 memmove(d->V_L + MPC_V_MEM, d->V_L, 960 * sizeof(MPC_SAMPLE_FORMAT) ); 366 367 Synthese_Filter_float_internal( 368 OutData, 369 (MPC_SAMPLE_FORMAT *)(d->V_L + MPC_V_MEM), 370 (MPC_SAMPLE_FORMAT *)(d->Y_L [0])); 361 memmove(&p_dec->V_L[MPC_V_MEM], p_dec->V_L, 960 * sizeof *p_dec->V_L); 362 mpc_synthese_filter_float_internal(p_out, &p_dec->V_L[MPC_V_MEM], p_dec->Y_L[0]); 371 363 372 364 /******** right channel ********/ 373 memmove(d->V_R + MPC_V_MEM, d->V_R, 960 * sizeof(MPC_SAMPLE_FORMAT) ); 374 375 Synthese_Filter_float_internal( 376 OutData + 1, 377 (MPC_SAMPLE_FORMAT *)(d->V_R + MPC_V_MEM), 378 (MPC_SAMPLE_FORMAT *)(d->Y_R [0])); 365 memmove(&p_dec->V_R[MPC_V_MEM], p_dec->V_R, 960 * sizeof *p_dec->V_R); 366 mpc_synthese_filter_float_internal(p_out + 1, &p_dec->V_R[MPC_V_MEM], p_dec->Y_R[0]); 379 367 } 380 368 … … 385 373 /*******************************************/ 386 374 387 static const unsigned charParity [256] = { // parity375 static const mpc_uint8_t Parity [256] = { // parity 388 376 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1, 389 377 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, … … 423 411 */ 424 412 mpc_uint32_t 425 mpc_random_int(mpc_decoder *d)413 mpc_random_int(mpc_decoder* p_dec) 426 414 { 427 415 #if 1 428 416 mpc_uint32_t t1, t2, t3, t4; 429 417 430 t3 = t1 = d->__r1; t4 = t2 = d->__r2;// Parity calculation is done via table lookup, this is also available431 t1 &= 0xF5; t2 >>= 25; // on CPUs without parity, can be implemented in C and avoid unpredictable432 t1 = Parity [t1];t2 &= 0x63; // jumps and slow rotate through the carry flag operations.433 t1 <<= 31; t2 = Parity[t2];434 435 return ( d->__r1 = (t3 >> 1) | t1 ) ^ (d->__r2 = (t4 + t4) | t2 );418 t3 = t1 = p_dec->__r1; t4 = t2 = p_dec->__r2; // Parity calculation is done via table lookup, this is also available 419 t1 &= 0xF5; t2 >>= 25; // on CPUs without parity, can be implemented in C and avoid unpredictable 420 t1 = Parity[t1]; t2 &= 0x63; // jumps and slow rotate through the carry flag operations. 421 t1 <<= 31; t2 = Parity[t2]; 422 423 return (p_dec->__r1 = (t3 >> 1) | t1 ) ^ (p_dec->__r2 = (t4 + t4) | t2 ); 436 424 #else 437 return ( d->__r1 = (d->__r1 >> 1) | ((mpc_uint32_t)Parity [d->__r1 & 0xF5] << 31) ) ^438 (d->__r2 = (d->__r2 << 1) | (mpc_uint32_t)Parity [(d->__r2 >> 25) & 0x63]);425 return (p_dec->__r1 = (p_dec->__r1 >> 1) | ((mpc_uint32_t) Parity[ p_dec->__r1 & 0xF5] << 31)) 426 ^ (p_dec->__r2 = (p_dec->__r2 << 1) | (mpc_uint32_t) Parity[(p_dec->__r2 >> 25) & 0x63]); 439 427 #endif 440 428 }
Note: See TracChangeset
for help on using the changeset viewer.