This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/TMS320F28075: C28 Compiler/Assembler problem with long double

Part Number: TMS320F28075


Tool/software: TI C/C++ Compiler

Hi,

the C2000 Compiler/Assembler refuses to process the code below, I get the message (Console output) also shown below.

The .pp file generated according to "How to Submit a Compiler Test Case" is here: f64tf.zip

This is not the only case where this error occurs.

Thanks & regards,

Frank

"C:\\ti\\ccsv7\\utils\\bin\\gmake" -k f64tf.obj
'Building file: ../f64tf.c'
'Invoking: C2000 Compiler'
"C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/bin/cl2000" -v28 -ml -mt --vcu_support=vcu2 --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 -O2 --include_path="C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.1.LTS/include" --include_path="J:/workspace/firmware/duc/rtos/include" --include_path="J:/workspace/firmware/duc/duc_firmware/" --include_path="J:/workspace/firmware/duc/device_support/f2837xs/common/include" --include_path="J:/workspace/firmware/duc/device_support/f2837xs/headers/include" --include_path="J:/workspace/firmware/duc/driverlib/f2837xs/driverlib/inc" -g --preproc_with_comment --preproc_with_compile --define=CPU1 --display_error_number --diag_warning=225 --diag_suppress=10063 -k  "../f64tf.c"
1 Assembly Error, No Assembly Warnings

>> Compilation failure
subdir_rules.mk:191: recipe for target 'f64tf.obj' failed
"../f64tf.c", line 34 (col. 14): advice #2614-D: (Performance) Use --fp_mode=relaxed to enable TMU hardware support for FP division.
"f64tf.asm", ERROR!   at line 212: [E0200] Block size 7 out of range 8..127
            RPTB      $C$L5,AR6             ; [CPU_] |40|

typedef long double float64_t;


#define F64TF_MAXORDER  4           /* max. order of transfer function */


/* transfer function data structure */

typedef struct {
    int         order;                  /* order of transfer function */
    int         index;                  /* index into input/output values */
    float64_t   dinv;                   /* 1 / b[0] for faster anti windup */
    float64_t   ymin;                   /* lower output saturation */
    float64_t   ymax;                   /* upper output saturation */
    float64_t   b[F64TF_MAXORDER+1];    /* numerator coefficients */
    float64_t   a[F64TF_MAXORDER+1];    /* denominator coefficients */
    float64_t   u[F64TF_MAXORDER];      /* input values */
    float64_t   y[F64TF_MAXORDER];      /* output values */
} f64tf_data;

 
/* initialize f64tf_data with z transfer function G(z) = B(z) / A(z) */
void    f64tf_init_tf(f64tf_data *p, int order, float64_t b[], float64_t a[])
{
    int         i;
    float64_t   an;
    
    p->order = order;
    an = 1.0 / a[0];
    for ( i = 0; i <= order; ++i ) {
        p->a[i] = a[i] * an;
        p->b[i] = b[i] * an;
    }
#if COMPILER_FAILS || 1
    for ( ; i <= F64TF_MAXORDER; ++i ) {
        p->a[i] = p->b[i] = 0.0;
    }
#endif
    p->dinv = 1.0 / b[0];
}