Commit 8d14bce5 authored by Fabian Bauer's avatar Fabian Bauer
Browse files

some push/pop wmops added, also addedd FIX_1072_SPEEDUP_gainpanning and...

some push/pop wmops added, also addedd FIX_1072_SPEEDUP_gainpanning and FIX_1072_SPEEDUP_COMPUTEDIFUSENESSB active
parent e499d56a
Loading
Loading
Loading
Loading
Loading
+51 −0
Original line number Diff line number Diff line
@@ -960,6 +960,7 @@ void computeDiffuseness_fixed(
    q_intensity = add( q_factor_intensity[0], min_q_shift2 );
    move16();

    push_wmops( "(IDR) LOOP1 DirACparams computeDiffuseness B <<-|" );
    FOR( i = 0; i < DIRAC_NO_COL_AVG_DIFF; ++i )
    {
        /* Energy slow */
@@ -967,6 +968,28 @@ void computeDiffuseness_fixed(

        q_tmp = add( q_factor_energy[i], min_q_shift1 );


#ifdef FIX_1072_SPEEDUP_COMPUTEDIFUSENESSB
        Word16 shift_q = sub( q_tmp, q_ene );
        Word32 shiftEquiv;
        Word16 shift_qtotal;
        if( shift_q < 0 )
        {
            shiftEquiv = L_lshl( 0x80000000, shift_q );
            shift_qtotal = sub( min_q_shift1, 0 );
        }
        if( shift_q >= 0 )
        {
            shiftEquiv = L_add( 0x7FFFFFFF, 0 );
            shift_qtotal = sub( min_q_shift1, shift_q );
        }
        FOR( k = 0; k < num_freq_bands; k++ )
        {
            tmp = L_shl( p_tmp_c[k], shift_qtotal );
            energy_slow[k] = Madd_32_32_r( tmp, energy_slow[k], shiftEquiv );
            move32();
        }
#else
        Word16 shift_q = sub( q_tmp, q_ene );
        IF( shift_q < 0 )
        {
@@ -986,6 +1009,9 @@ void computeDiffuseness_fixed(
                move32();
            }
        }
#endif



        q_ene = s_min( q_ene, q_tmp );

@@ -993,6 +1019,28 @@ void computeDiffuseness_fixed(
        q_tmp = add( q_factor_intensity[i], min_q_shift2 );

        shift_q = sub( q_tmp, q_intensity );
#ifdef FIX_1072_SPEEDUP_COMPUTEDIFUSENESSB
        if( shift_q >= 0 )
        {
            shiftEquiv = L_lshl( 0x7FFFFFFF, 0 );
            shift_qtotal = sub( min_q_shift2, shift_q );
        }
        if ( shift_q < 0 )
        {
            shiftEquiv = L_lshl( 0x80000000, shift_q );
            shift_qtotal = sub( min_q_shift2, 0 );
        }
        FOR( j = 0; j < DIRAC_NUM_DIMS; ++j )
        {
            p_tmp = buffer_intensity[j][i];
            FOR( k = 0; k < num_freq_bands; k++ )
            {
                tmp = L_shl( p_tmp[k], shift_qtotal );
                intensity_slow[j * num_freq_bands + k] = Madd_32_32_r( tmp, intensity_slow[j * num_freq_bands + k], shiftEquiv );
                move32();
            }
        }
#else
        IF( shift_q > 0 )
        {
            FOR( j = 0; j < DIRAC_NUM_DIMS; ++j )
@@ -1019,8 +1067,11 @@ void computeDiffuseness_fixed(
                }
            }
        }
#endif

        q_intensity = s_min( q_intensity, q_tmp );
    }
    pop_wmops(); /*push_wmops( "(IDR) LOOP1 DirACparams computeDiffuseness B <<-|" );/*/

    min_q_shift1 = getScaleFactor32( intensity_slow, i_mult( DIRAC_NUM_DIMS, num_freq_bands ) );
    min_q_shift1 = sub( min_q_shift1, idiv1616( add( find_guarded_bits_fx( DIRAC_NUM_DIMS ), 1 ), 2 ) );
+5 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@

#define SUPPORT_JBM_TRACEFILE                   /* Support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */

/*#define WMOPS*/                                   /* Activate complexity and memory counters */
//#define WMOPS                                   /* Activate complexity and memory counters */
#ifdef WMOPS
/*#define WMOPS_PER_FRAME*/                     /* Output per-frame complexity (writes one float value per frame to the file "wmops_analysis") */
/*#define WMOPS_DETAIL*/                        /* Output detailed complexity printout for every function. Increases runtime overhead */
@@ -153,3 +153,7 @@
#define FIX_881_HILBERT_FILTER                  /* VA: improve the precision of the Hilbert filter to remove 2kHz unwanted tone */
#endif
#define FIX_MINOR_SVD_WMOPS_MR1010X             /* FhG: Minor WMOPS tuning, bit-exact to previous version, saves about 8.2 WMOPS for MR1010 */


#define FIX_1072_SPEEDUP_gainpanning            /* FhG: WMOPS tuning, in development*/
#define FIX_1072_SPEEDUP_COMPUTEDIFUSENESSB     /* "-" */
 No newline at end of file
+18 −5
Original line number Diff line number Diff line
@@ -2231,7 +2231,7 @@ void ivas_dirac_dec_render_sf_fx(
    move16();
    Word16 tmp1;

    push_wmops( "ivas_dirac_dec_render" );
    push_wmops( "ivas_dirac_dec_render (IDR)" );

    /* Initialize aux buffers */
    hDirAC = st_ivas->hDirAC;
@@ -2341,6 +2341,7 @@ void ivas_dirac_dec_render_sf_fx(
    }
    ELSE IF( !( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) )
    {
        push_wmops( "(IDR) SBA_FORMAT | SBA_ISM_FORMAT" );
        Word16 outchannels;
        idx_lfe = 0;
        move16();
@@ -2409,6 +2410,7 @@ void ivas_dirac_dec_render_sf_fx(
                }
            }
        }
        pop_wmops(); /*push_wmops( "(IDR) SBA_FORMAT | SBA_ISM_FORMAT" );*/
    }

    size = imult1616( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands );
@@ -2706,6 +2708,7 @@ void ivas_dirac_dec_render_sf_fx(
        }
    }

    push_wmops( "(IDR) LOOP1" );
    FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ )
    {
        index_slot = add( slot_idx_start, slot_idx );
@@ -2923,6 +2926,8 @@ void ivas_dirac_dec_render_sf_fx(
                    move16();
                    BREAK;
                default:
                    pop_wmops();  /* push_wmops( "ivas_dirac_dec_render (IDR)" );*/
                    pop_wmops(); /*push_wmops( "(IDR) LOOP1");/*/
                    return;
            }
            q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q;
@@ -2932,6 +2937,7 @@ void ivas_dirac_dec_render_sf_fx(
        /*-----------------------------------------------------------------*
         * Compute DirAC parameters at decoder side
         *-----------------------------------------------------------------*/
        push_wmops( "(IDR) LOOP1 DirACparams |" );
        IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) )
        {
            Copy( &hSpatParamRendCom->azimuth[md_idx][hDirAC->hConfig->enc_param_start_band], &azimuth[hDirAC->hConfig->enc_param_start_band], sub( hSpatParamRendCom->num_freq_bands, hDirAC->hConfig->enc_param_start_band ) );
@@ -2980,8 +2986,11 @@ void ivas_dirac_dec_render_sf_fx(
            hDirACRend->q_buffer_energy[index - 1] = DirAC_mem.reference_power_q;
            move16();

            push_wmops( "(IDR) LOOP1 DirACparams computeDiffuseness <-|" );
            computeDiffuseness_fixed( hDirACRend->buffer_intensity_real_fx, hDirACRend->buffer_energy_fx, num_freq_bands, hSpatParamRendCom->diffuseness_vector_fx[md_idx], hDirACRend->q_buffer_intensity_real, hDirACRend->q_buffer_energy, &hSpatParamRendCom->q_diffuseness_vector );
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 DirACparams computeDiffuseness <-|" );/*/
        }
        pop_wmops(); /* push_wmops( "(IDR) LOOP1 DirACparams |" );*/

        /*-----------------------------------------------------------------*
         * frequency domain decorrelation
@@ -3083,6 +3092,7 @@ void ivas_dirac_dec_render_sf_fx(
        }

        /*Compute PSDs*/
        push_wmops( "(IDR) LOOP1 PSDs |" );
        h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params );
        h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state );
        num_channels_dir = hDirACRend->num_outputs_dir;
@@ -3165,6 +3175,7 @@ void ivas_dirac_dec_render_sf_fx(
        }
        ELSE
        {
            push_wmops( "(IDR) LOOP1 PSDs PATH3 <-|" );
            ivas_dirac_dec_output_synthesis_process_slot_fx( reference_power_fx,
                                                             DirAC_mem.reference_power_q,
                                                             p_onset_filter_fx,
@@ -3182,6 +3193,7 @@ void ivas_dirac_dec_render_sf_fx(
                                                             md_idx,
                                                             hodirac_flag,
                                                             hDirAC->hConfig->dec_param_estim );
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 <-|" );/*/
        }

        IF( hDirAC->hConfig->dec_param_estim )
@@ -3252,7 +3264,9 @@ void ivas_dirac_dec_render_sf_fx(
            v_add_fixed( reference_power_fx, reference_power_smooth_fx, reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands, 1 );
            q_reference_power_smooth = sub( q_reference_power_smooth, 1 );
        }
        pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs |" );*/
    }
    pop_wmops(); /*push_wmops( "(IDR) LOOP1" );*/

    minimum_s( q_proto_direct_buffer, hSpatParamRendCom->subframe_nbslots[subframe_idx], &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q );
    IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) )
@@ -3581,7 +3595,6 @@ void ivas_dirac_dec_render_sf_fx(
    /*-----------------------------------------------------------------*
     * CLDFB synthesis (and binaural rendering)
     *-----------------------------------------------------------------*/

    index_slot = slot_idx_start_cldfb_synth;
    move16();

@@ -3963,6 +3976,7 @@ void ivas_dirac_dec_render_sf_fx(
        }
    }


    hSpatParamRendCom->slots_rendered = add( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->subframe_nbslots[subframe_idx] );
    move16();
    hSpatParamRendCom->subframes_rendered = add( hSpatParamRendCom->subframes_rendered, 1 );
@@ -4077,8 +4091,7 @@ void ivas_dirac_dec_render_sf_fx(
            }
        }
    }

    pop_wmops();
    pop_wmops(); /*push_wmops( "ivas_dirac_dec_render (IDR)" );*/

    return;
}
+86 −3
Original line number Diff line number Diff line
@@ -710,11 +710,13 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
        }
    }

    push_wmops( "(IDR) LOOP1 PSDs PATH3 B <<-|" );
    test();
    IF( dec_param_estim == FALSE && hodirac_flag )
    {
        IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) )
        {
            push_wmops( "(IDR) LOOP1 PSDs PATH3 B1<<<-|" );
            v_multc_fixed( hSpatParamRendCom->energy_ratio1_fx[md_idx], -MAX_32 /*-1 Q31*/, aux_buf, num_freq_bands ); /* 30 + 31 - 31 -> 30 */
            v_addc_fixed( aux_buf, ONE_IN_Q30 /*1 Q30*/, aux_buf, num_freq_bands );                                    /*30*/
            Copy32( hSpatParamRendCom->energy_ratio1_fx[md_idx],
@@ -737,19 +739,24 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
            move16();
            h_dirac_output_synthesis_state->direct_power_factor_q = 30;
            move16();
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B1<<<-|" );/*/
        }
        ELSE
        {
            push_wmops( "(IDR) LOOP1 PSDs PATH3 B2<<<-|" );
            ivas_dirac_dec_compute_gain_factors_fx( num_freq_bands,
                                                    hSpatParamRendCom->diffuseness_vector_fx[md_idx],
                                                    h_dirac_output_synthesis_state->direct_power_factor_fx,
                                                    h_dirac_output_synthesis_state->diffuse_power_factor_fx,
                                                    &h_dirac_output_synthesis_state->direct_power_factor_q,
                                                    &h_dirac_output_synthesis_state->diffuse_power_factor_q );
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B2<<<-|" );*/
        }
    }
    ELSE IF( EQ_16( dec_param_estim, TRUE ) )
    {
        push_wmops( "(IDR) LOOP1 PSDs PATH3 B3<<<-|" );
        push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.1<<<<-|" );
        /* compute direct responses */
        ivas_dirac_dec_compute_directional_responses_fx( hSpatParamRendCom,
                                                         hDirACRend,
@@ -764,7 +771,7 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                                                         sh_rot_max_order,
                                                         p_Rmat,
                                                         hodirac_flag );

        pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.1<<<<-|" );*/
        {
            IF( h_dirac_output_synthesis_state->direct_responses_square_fx )
            {
@@ -811,12 +818,14 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                Q_temp_cy_cross_dir_smooth_fx[kk] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth;
                move16();
            }

            push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop <<<<-|" );
            FOR( ch_idx = 0; ch_idx < s_min( 4, nchan_transport ); ch_idx++ )
            {
                Word16 k;
                IF( ch_idx != 0 )
                {
                    push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop IF <<<<<-|" );
                    ;
                    Word32 a, c;
                    Word16 b, b_exp, sqr_exp, q_diff_aab, q_diff_c;
                    Word32 mpy_a_a_b, mpy_diff_c, mpy_diff_aab;
@@ -906,6 +915,8 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                        }
                    }
                    c = Madd_32_16( ONE_IN_Q27 /*1 Q27*/, L_sub( h_dirac_output_synthesis_params->diffuse_compensation_factor_fx, ONE_IN_Q27 /*1 Q27*/ ), 5461 ); /*Diffuseness modellling nrg compensation*/ /* 1.0 / 6.0  = 5461 in Q15*/ /*Q27*/

                    push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop IF nfreqbds <<<<<<-|" );
                    FOR( ; k < num_freq_bands; k++ )
                    {
                        a = h_dirac_output_synthesis_state->direct_responses_fx[ch_idx * num_freq_bands + k]; // Q = h_dirac_output_synthesis_state->q_direct_responses
@@ -987,9 +998,12 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                            move16();
                        }
                    }
                    pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop IF nfreqbds <<<<<<-|" );*/
                    pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop IF <<<<<-|" );*/
                }
                ELSE
                {
                    push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop ELSE <<<<<-|" );
                    Word32 sqr_inp, mpy_diff, sqr;
                    Word16 sqr_exp;
                    /*Diffuseness modellling nrg compensation*/
@@ -1027,6 +1041,7 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                            move16();
                        }
                    }
                    push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop ELSE nfreqbds <<<<<<-|" );
                    FOR( ; k < num_freq_bands; k++ )
                    {
                        mpy_diff = Mpy_32_32( diffuseness[k], L_sub( h_dirac_output_synthesis_params->diffuse_compensation_factor_decorr_fx, ONE_IN_Q29 /*1 Q29*/ ) ); // Q = q_diffuseness - 1
@@ -1060,8 +1075,12 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                            move16();
                        }
                    }
                    pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop ELSE nfreqbds <<<<<<-|" );*/
                    pop_wmops();/*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop ELSE <<<<<-|" );/*/
                }
            }
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 bigloop <<<<-|" );/*/

            Word16 temp = MAX_16; /*q0*/
            move16();
            tmp16 = imult1616( num_freq_bands, num_channels_dir );
@@ -1078,9 +1097,21 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
            }
            free( Q_temp_cy_cross_dir_smooth_fx );
            /*Directional gain (panning)*/
            push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 gainpanning <<<<-|" );

            Word16 temp_q = sub( add( h_dirac_output_synthesis_state->direct_power_factor_q, h_dirac_output_synthesis_state->direct_responses_q ), 31 );
            IF( LT_16( temp_q, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ) )
            {
#ifdef FIX_1072_SPEEDUP_gainpanning /*is there any difference in any bitstream?*/
                Word16 temp_q1 = sub( temp_q, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth );
                FOR( Word16 kk = 0; kk < tmp16; kk++ )
                {
                    h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk] = L_shl( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk], temp_q1 ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ->temp_q*/
                    move32();
                }
                h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = temp_q;
                move16();
#else
                FOR( Word16 kk = 0; kk < tmp16; kk++ )
                {
                    h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk] = L_shl( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk], sub( temp_q, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ->temp_q*/
@@ -1088,7 +1119,53 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                }
                h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = temp_q;
                move16();
#endif

            }
#ifdef FIX_1072_SPEEDUP_gainpanning
            Word16 temp_q1 = sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, temp_q );
            FOR( ch_idx = s_min( 4, nchan_transport ); ch_idx < num_channels_dir; ch_idx++ )
            {
                IF( NE_16( temp_q, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ) )
                {
                    Word16 i;
                    Word32 aux;
                    IF(temp_q1 < 0)
                    {
                        Word32 temp_q1_equiv = L_lshl( 0x80000000, temp_q1 );
                        FOR( i = 0; i < num_freq_bands; i++ )
                        {
                            aux = Mpy_32_32( h_dirac_output_synthesis_state->direct_power_factor_fx[i], h_dirac_output_synthesis_state->direct_responses_fx[ch_idx * num_freq_bands + i] );
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + i] = Madd_32_32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + i] , aux, temp_q1_equiv );
                            move32();
                        }
                    }
                    ELSE
                    {
                        FOR( i = 0; i < num_freq_bands; i++ )
                        {
                            aux = Mpy_32_32( h_dirac_output_synthesis_state->direct_power_factor_fx[i], h_dirac_output_synthesis_state->direct_responses_fx[ch_idx * num_freq_bands + i] );
                            aux = L_shl( aux, temp_q1 );
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + i] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + i], aux );
                            move32();
                        }
                    }

                }
                ELSE
                {
                    Word16 i;
                    FOR( i = 0; i < num_freq_bands; i++ )
                    {
                        h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + i] = Madd_32_32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + i], h_dirac_output_synthesis_state->direct_power_factor_fx[i], h_dirac_output_synthesis_state->direct_responses_fx[ch_idx * num_freq_bands + i] );
                        move32();
                    }
                }


            }

#else
            FOR( ch_idx = s_min( 4, nchan_transport ); ch_idx < num_channels_dir; ch_idx++ )
            {
                v_mult_fixed( h_dirac_output_synthesis_state->direct_power_factor_fx,
@@ -1107,6 +1184,9 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                             num_freq_bands, 0 ); /*Q(h_dirac_output_synthesis_state->q_cy_cross_dir_smooth)*/
            }

#endif
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3.3 gainpanning <<<<-|" );*/

            /*Diffuse gain*/
            FOR( ch_idx = s_min( 4, nchan_transport ); ch_idx < num_channels_diff; ch_idx++ )
            {
@@ -1124,7 +1204,8 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                             &h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx[ch_idx * num_freq_bands_diff],
                             num_freq_bands_diff, 0 ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth*/
            }

            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3 <<-|" );/*/
            pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B <<-|" );/*/
            return;
        }
        ELSE
@@ -1143,7 +1224,9 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
            h_dirac_output_synthesis_state->direct_power_factor_q = 31;
            move16();
        }
          pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B3<<<-|" );/*/
    }
    pop_wmops(); /*push_wmops( "(IDR) LOOP1 PSDs PATH3 B <<-|" );/*/

    diff_start_band = 0;
    move16();