2360{
2361 int32_t n2 = n >> 1, n4 = n >> 2, n8 = n >> 3, l;
2363
2366 float *u=nullptr,*v=nullptr;
2367
2368 float *A = f->
A[blocktype];
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389 {
2390 float *d,*e, *AA, *e_stop;
2391 d = &buf2[n2-2];
2392 AA = A;
2393 e = &buffer[0];
2394 e_stop = &buffer[n2];
2395 while (e != e_stop) {
2396 d[1] = (e[0] * AA[0] - e[2]*AA[1]);
2397 d[0] = (e[0] * AA[1] + e[2]*AA[0]);
2398 d -= 2;
2399 AA += 2;
2400 e += 4;
2401 }
2402
2403 e = &buffer[n2-3];
2404 while (d >= buf2) {
2405 d[1] = (-e[2] * AA[0] - -e[0]*AA[1]);
2406 d[0] = (-e[2] * AA[1] + -e[0]*AA[0]);
2407 d -= 2;
2408 AA += 2;
2409 e -= 4;
2410 }
2411 }
2412
2413
2414
2415
2416
2417 u = buffer;
2418 v = buf2;
2419
2420
2421
2422
2423 {
2424 float *AA = &A[n2-8];
2425 float *d0,*d1, *e0, *e1;
2426
2427 e0 = &v[n4];
2428 e1 = &v[0];
2429
2430 d0 = &u[n4];
2431 d1 = &u[0];
2432
2433 while (AA >= A) {
2434 float v40_20, v41_21;
2435
2436 v41_21 = e0[1] - e1[1];
2437 v40_20 = e0[0] - e1[0];
2438 d0[1] = e0[1] + e1[1];
2439 d0[0] = e0[0] + e1[0];
2440 d1[1] = v41_21*AA[4] - v40_20*AA[5];
2441 d1[0] = v40_20*AA[4] + v41_21*AA[5];
2442
2443 v41_21 = e0[3] - e1[3];
2444 v40_20 = e0[2] - e1[2];
2445 d0[3] = e0[3] + e1[3];
2446 d0[2] = e0[2] + e1[2];
2447 d1[3] = v41_21*AA[0] - v40_20*AA[1];
2448 d1[2] = v40_20*AA[0] + v41_21*AA[1];
2449
2450 AA -= 8;
2451
2452 d0 += 4;
2453 d1 += 4;
2454 e0 += 4;
2455 e1 += 4;
2456 }
2457 }
2458
2459
2461
2462
2463
2464
2465
2466
2467
2468
2469
2472
2473
2478
2479 l=2;
2480 for (; l < (ld-3)>>1; ++l) {
2481 int32_t k0 = n >> (l+2), k0_2 = k0>>1;
2484 for (i=0; i < lim; ++i)
2486 }
2487
2488 for (; l < ld-6; ++l) {
2489 int32_t k0 = n >> (l+2), k1 = 1 << (l+3), k0_2 = k0>>1;
2493 float *Aptr = A;
2494 i_off = n2-1;
2495 for (r=rlim; r > 0; --r) {
2497 Aptr += k1*4;
2498 i_off -= 8;
2499 }
2500 }
2501
2502
2503
2504
2505
2506
2508
2509
2510
2511
2512
2513 {
2515
2516
2517
2518
2519
2520 float *d0 = &v[n4-4];
2521 float *d1 = &v[n2-4];
2522 while (d0 >= v) {
2524
2525 k4 = bitrev[0];
2526 d1[3] = u[k4+0];
2527 d1[2] = u[k4+1];
2528 d0[3] = u[k4+2];
2529 d0[2] = u[k4+3];
2530
2531 k4 = bitrev[1];
2532 d1[1] = u[k4+0];
2533 d1[0] = u[k4+1];
2534 d0[1] = u[k4+2];
2535 d0[0] = u[k4+3];
2536
2537 d0 -= 4;
2538 d1 -= 4;
2539 bitrev += 2;
2540 }
2541 }
2542
2543
2544
2545
2546 FL_ASSERT(v == buf2,
"v must equal buf2");
2547
2548
2549
2550 {
2551 float *
C = f->
C[blocktype];
2552 float *d, *e;
2553
2554 d = v;
2555 e = v + n2 - 4;
2556
2557 while (d < e) {
2558 float a02,a11,b0,b1,b2,b3;
2559
2560 a02 = d[0] - e[2];
2561 a11 = d[1] + e[3];
2562
2563 b0 =
C[1]*a02 +
C[0]*a11;
2564 b1 =
C[1]*a11 -
C[0]*a02;
2565
2566 b2 = d[0] + e[ 2];
2567 b3 = d[1] - e[ 3];
2568
2569 d[0] = b2 + b0;
2570 d[1] = b3 + b1;
2571 e[2] = b2 - b0;
2572 e[3] = b1 - b3;
2573
2574 a02 = d[2] - e[0];
2575 a11 = d[3] + e[1];
2576
2577 b0 =
C[3]*a02 +
C[2]*a11;
2578 b1 =
C[3]*a11 -
C[2]*a02;
2579
2580 b2 = d[2] + e[ 0];
2581 b3 = d[3] - e[ 1];
2582
2583 d[2] = b2 + b0;
2584 d[3] = b3 + b1;
2585 e[0] = b2 - b0;
2586 e[1] = b1 - b3;
2587
2589 d += 4;
2590 e -= 4;
2591 }
2592 }
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604 {
2605 float *d0,*d1,*d2,*d3;
2606
2607 float *
B = f->
B[blocktype] + n2 - 8;
2608 float *e = buf2 + n2 - 8;
2609 d0 = &buffer[0];
2610 d1 = &buffer[n2-4];
2611 d2 = &buffer[n2];
2612 d3 = &buffer[n-4];
2613 while (e >= v) {
2614 float p0,p1,p2,p3;
2615
2616 p3 = e[6]*
B[7] - e[7]*
B[6];
2617 p2 = -e[6]*
B[6] - e[7]*
B[7];
2618
2619 d0[0] = p3;
2620 d1[3] = - p3;
2621 d2[0] = p2;
2622 d3[3] = p2;
2623
2624 p1 = e[4]*
B[5] - e[5]*
B[4];
2625 p0 = -e[4]*
B[4] - e[5]*
B[5];
2626
2627 d0[1] = p1;
2628 d1[2] = - p1;
2629 d2[1] = p0;
2630 d3[2] = p0;
2631
2632 p3 = e[2]*
B[3] - e[3]*
B[2];
2633 p2 = -e[2]*
B[2] - e[3]*
B[3];
2634
2635 d0[2] = p3;
2636 d1[1] = - p3;
2637 d2[2] = p2;
2638 d3[1] = p2;
2639
2640 p1 = e[0]*
B[1] - e[1]*
B[0];
2641 p0 = -e[0]*
B[0] - e[1]*
B[1];
2642
2643 d0[3] = p1;
2644 d1[0] = - p1;
2645 d2[3] = p0;
2646 d3[0] = p0;
2647
2649 e -= 8;
2650 d0 += 4;
2651 d2 += 4;
2652 d1 -= 4;
2653 d3 -= 4;
2654 }
2655 }
2656
2659}
#define FL_ASSERT(x, MSG)
static void imdct_step3_inner_s_loop(int32_t n, float *e, int32_t i_off, int32_t k_off, float *A, int32_t a_off, int32_t k0) FL_NOEXCEPT
static int32_t ilog(int32 n) FL_NOEXCEPT
static void imdct_step3_iter0_loop(int32_t n, float *e, int32_t i_off, int32_t k_off, float *A) FL_NOEXCEPT
static constexpr int8_t C
static void imdct_step3_inner_s_loop_ld654(int32_t n, float *e, int32_t i_off, float *A, int32_t base_n) FL_NOEXCEPT
static void imdct_step3_inner_r_loop(int32_t lim, float *e, int32_t d0, int32_t k_off, float *A, int32_t k1) FL_NOEXCEPT
FL_DISABLE_WARNING_PUSH unsigned char * B
#define fl_stbv_temp_free(f, p)
#define fl_stbv_temp_alloc_save(f)
#define fl_stbv_temp_alloc(f, size)
#define fl_stbv_temp_alloc_restore(f, p)