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.

Optimization Level Change Calculation Results

I am finding that calculation done in debug and release configuration results in two different answers. Specifically the between optimization levels 1 and 2. I get the correct result is 0x111111 with -O1 and the incorrect result of 0xAEC3 with -O2. Attached are source code, output and list for each level. Any ideas?

Version: C6747, CCv5.2, C6000 CGT 7.3.4

1563.crap-O1-lst.txt
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    1

       1                    ;******************************************************************************
       2                    ;* TMS320C6x C/C++ Codegen                                          PC v7.3.4 *
       3                    ;* Date/Time created: Wed Oct 10 12:34:46 2012                                *
       4                    ;******************************************************************************
       5                            .compiler_opts --abi=coffabi --c64p_l1d_workaround=off --endian=little --hll_source=on --long_
       6                    
       7                    ;******************************************************************************
       8                    ;* GLOBAL FILE PARAMETERS                                                     *
       9                    ;*                                                                            *
      10                    ;*   Architecture      : TMS320C674x                                          *
      11                    ;*   Optimization      : Enabled at level 1                                   *
      12                    ;*   Optimizing for    : Compile time 1st, speed 2nd                          *
      13                    ;*                       Based on options: -o1, no -ms                        *
      14                    ;*   Endian            : Little                                               *
      15                    ;*   Interrupt Thrshld : Disabled                                             *
      16                    ;*   Data Access Model : Far Aggregate Data                                   *
      17                    ;*   Pipelining        : Disabled                                             *
      18                    ;*   Memory Aliases    : Presume are aliases (pessimistic)                    *
      19                    ;*   Debug Info        : DWARF Debug for Program Analysis w/Optimization      *
      20                    ;*                                                                            *
      21                    ;******************************************************************************
      22                    
      23                            .asg    A15, FP
      24                            .asg    B14, DP
      25                            .asg    B15, SP
      26                            .global $bss
      27                    
      28                    
      29                    $C$DW$CU        .dwtag  DW_TAG_compile_unit
      30                            .dwattr $C$DW$CU, DW_AT_name("../crap.c")
      31                            .dwattr $C$DW$CU, DW_AT_producer("TMS320C6x C/C++ Codegen PC v7.3.4 Copyright (c) 1996-2012 Te
      32                            .dwattr $C$DW$CU, DW_AT_TI_version(0x01)
      33                            .dwattr $C$DW$CU, DW_AT_comp_dir("C:\Projects\XSENSOR\PSMNG\SCT\WIP\Software\dsp_only_hid_ccsv
      34                    
      35                    $C$DW$1 .dwtag  DW_TAG_subprogram, DW_AT_name("printf")
      36                            .dwattr $C$DW$1, DW_AT_TI_symbol_name("_printf")
      37                            .dwattr $C$DW$1, DW_AT_type(*$C$DW$T$10)
      38                            .dwattr $C$DW$1, DW_AT_declaration
      39                            .dwattr $C$DW$1, DW_AT_external
      40                    $C$DW$2 .dwtag  DW_TAG_formal_parameter
      41                            .dwattr $C$DW$2, DW_AT_type(*$C$DW$T$27)
      42                    $C$DW$3 .dwtag  DW_TAG_unspecified_parameters
      43                            .dwendtag $C$DW$1
      44                    
      45                    ;       C:\ti\ccsv5\tools\compiler\c6000_7.3.4\bin\opt6x.exe C:\\DOCUME~1\\nwong.SCT\\LOCALS~1\\Temp\\
      46 00000000                   .sect   ".text"
      47                            .clink
      48                            .global _crap
      49                    
      50                    $C$DW$4 .dwtag  DW_TAG_subprogram, DW_AT_name("crap")
      51                            .dwattr $C$DW$4, DW_AT_low_pc(_crap)
      52                            .dwattr $C$DW$4, DW_AT_high_pc(0x00)
      53                            .dwattr $C$DW$4, DW_AT_TI_symbol_name("_crap")
      54                            .dwattr $C$DW$4, DW_AT_external
      55                            .dwattr $C$DW$4, DW_AT_TI_begin_file("../crap.c")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    2

      56                            .dwattr $C$DW$4, DW_AT_TI_begin_line(0x07)
      57                            .dwattr $C$DW$4, DW_AT_TI_begin_column(0x06)
      58                            .dwattr $C$DW$4, DW_AT_TI_max_frame_size(0x18)
      59                            .dwattr $C$DW$4, DW_AT_frame_base[DW_OP_breg31 24]
      60                            .dwattr $C$DW$4, DW_AT_TI_skeletal
      61                            .dwpsn  file "../crap.c",line 8,column 1,is_stmt,address _crap
      62                    $C$DW$5 .dwtag  DW_TAG_formal_parameter, DW_AT_name("ulFreqKHz_")
      63                            .dwattr $C$DW$5, DW_AT_TI_symbol_name("_ulFreqKHz_")
      64                            .dwattr $C$DW$5, DW_AT_type(*$C$DW$T$19)
      65                            .dwattr $C$DW$5, DW_AT_location[DW_OP_reg4]
      66                    ;----------------------------------------------------------------------
      67                    ;   7 | void crap(uint32_t ulFreqKHz_)                                         
      68                    ;----------------------------------------------------------------------
      69                    
      70                    ;******************************************************************************
      71                    ;* FUNCTION NAME: crap                                                        *
      72                    ;*                                                                            *
      73                    ;*   Regs Modified     : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B0,B1,B2,B3,B4,*
      74                    ;*                           B5,B6,B7,B8,B9,SP,A16,A17,A18,A19,A20,A21,A22,   *
      75                    ;*                           A23,A24,A25,A26,A27,A28,A29,A30,A31,B16,B17,B18, *
      76                    ;*                           B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30, *
      77                    ;*                           B31                                              *
      78                    ;*   Regs Used         : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B0,B1,B2,B3,B4,*
      79                    ;*                           B5,B6,B7,B8,B9,DP,SP,A16,A17,A18,A19,A20,A21,A22,*
      80                    ;*                           A23,A24,A25,A26,A27,A28,A29,A30,A31,B16,B17,B18, *
      81                    ;*                           B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30, *
      82                    ;*                           B31                                              *
      83                    ;*   Local Frame Size  : 16 Args + 0 Auto + 8 Save = 24 byte                  *
      84                    ;******************************************************************************
      85 00000000           _crap:
      86                    ;** --------------------------------------------------------------------------*
      87                    ;----------------------------------------------------------------------
      88                    ;   9 | uint64_t ullFreqReg;                                                   
      89                    ;  10 | uint32_t ulFreqReg;                                                    
      90                    ;  11 | ullFreqReg  = FREQ_BIT_RESOLUTION;                                     
      91                    ;  12 | ullFreqReg *= ulFreqKHz_;                                              
      92                    ;  13 | ullFreqReg /= DSP_CLKIN_KHZ;                                           
      93                    ;  14 | ulFreqReg   = (uint32_t)ullFreqReg;                                    
      94                    ;----------------------------------------------------------------------
      95 00000000 05bcd4f4             STW     .D2T1   A11,*SP--(24)     ; |8| 
      96                    
      97 00000004 053ca2f5             STW     .D2T1   A10,*+SP(20)      ; |8| 
      98 00000008     4646  ||         MV      .L1     A4,A10            ; |8| 
      99                    
     100 0000000a     75c6             MV      .L1X    B3,A11            ; |8| 
     101                            .dwpsn  file "../crap.c",line 15,column 3,is_stmt
     102                    ;----------------------------------------------------------------------
     103                    ;  15 | printf("%d %x\n", ulFreqKHz_, ulFreqReg);                              
     104                    ;----------------------------------------------------------------------
     105 0000000c 032b9ca2             SHL     .S2X    A10,28,B6         ; |15| 
     106 00000010 022ee02a             MVK     .S2     0x5dc0,B4         ; |15| 
     107                    $C$DW$6 .dwtag  DW_TAG_TI_branch
     108                            .dwattr $C$DW$6, DW_AT_low_pc(0x00)
     109                            .dwattr $C$DW$6, DW_AT_name("__divull")
     110                            .dwattr $C$DW$6, DW_AT_TI_call
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    3

     111                    
     112 00000014 10000013!            CALLP   .S2     __divull,B3
     113 00000018 029089a1  ||         SHRU    .S1     A4,4,A5           ; |15| 
     114 00000020     9346  ||         MV      .L1X    B6,A4             ; |15| 
     115 00000022     06a7  ||         ZERO    .L2     B5                ; |15| 
     116                    
     117 00000024           $C$RL2:    ; CALL OCCURS {__divull} {0}      ; |15| 
     118                    ;** --------------------------------------------------------------------------*
     119                    
     120 00000024 0200002b%            MVKL    .S2     $C$SL1+0,B4
     121 00000028 023c62f4  ||         STW     .D2T1   A4,*+SP(12)       ; |15| 
     122                    
     123 0000002c 0200006b%            MVKH    .S2     $C$SL1+0,B4
     124 00000030 053c42f4  ||         STW     .D2T1   A10,*+SP(8)       ; |15| 
     125                    
     126                    $C$DW$7 .dwtag  DW_TAG_TI_branch
     127                            .dwattr $C$DW$7, DW_AT_low_pc(0x00)
     128                            .dwattr $C$DW$7, DW_AT_name("_printf")
     129                            .dwattr $C$DW$7, DW_AT_TI_call
     130                    
     131 00000034 1ffffc13!            CALLP   .S2     _printf,B3
     132 00000038     bc45  ||         STW     .D2T2   B4,*+SP(4)        ; |15| 
     133                    
     134 0000003a           $C$RL3:    ; CALL OCCURS {_printf} {0}       ; |15| 
     135                    ;** --------------------------------------------------------------------------*
     136                            .dwpsn  file "../crap.c",line 16,column 1,is_stmt
     137 0000003a     7587             MV      .L2X    A11,B3            ; |16| 
     138                    $C$DW$8 .dwtag  DW_TAG_TI_branch
     139                            .dwattr $C$DW$8, DW_AT_low_pc(0x00)
     140                            .dwattr $C$DW$8, DW_AT_TI_return
     141                    
     142 00000040 000c0363             RET     .S2     B3                ; |16| 
     143 00000044 053ca2e4  ||         LDW     .D2T1   *+SP(20),A10      ; |16| 
     144                    
     145 00000048 05bcd2e4             LDW     .D2T1   *++SP(24),A11     ; |16| 
     146 0000004c 00006000             NOP             4
     147                               ; BRANCH OCCURS {B3}              ; |16| 
     148                            .dwattr $C$DW$4, DW_AT_TI_end_file("../crap.c")
     149                            .dwattr $C$DW$4, DW_AT_TI_end_line(0x10)
     150                            .dwattr $C$DW$4, DW_AT_TI_end_column(0x01)
     151                            .dwendtag $C$DW$4
     152                    
     153                    ;******************************************************************************
     154                    ;* STRINGS                                                                    *
     155                    ;******************************************************************************
     156 00000000                   .sect   ".const:.string"
     157 00000000 00000025  $C$SL1: .string "%d %x",10,0
         00000001 00000064 
         00000002 00000020 
         00000003 00000025 
         00000004 00000078 
         00000005 0000000A 
         00000006 00000000 
     158                    ;*****************************************************************************
     159                    ;* UNDEFINED EXTERNAL REFERENCES                                             *
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    4

     160                    ;*****************************************************************************
     161                            .global _printf
     162                            .global __divull
     163                    
     164                    ;******************************************************************************
     165                    ;* BUILD ATTRIBUTES                                                           *
     166                    ;******************************************************************************
     167                            .battr "TI", Tag_File, 1, Tag_ABI_stack_align_needed(0)
     168                            .battr "TI", Tag_File, 1, Tag_ABI_stack_align_preserved(0)
     169                            .battr "TI", Tag_File, 1, Tag_Tramps_Use_SOC(1)
     170                    
     171                    ;******************************************************************************
     172                    ;* TYPE INFORMATION                                                           *
     173                    ;******************************************************************************
     174                    $C$DW$T$4       .dwtag  DW_TAG_base_type
     175                            .dwattr $C$DW$T$4, DW_AT_encoding(DW_ATE_boolean)
     176                            .dwattr $C$DW$T$4, DW_AT_name("bool")
     177                            .dwattr $C$DW$T$4, DW_AT_byte_size(0x01)
     178                    $C$DW$T$5       .dwtag  DW_TAG_base_type
     179                            .dwattr $C$DW$T$5, DW_AT_encoding(DW_ATE_signed_char)
     180                            .dwattr $C$DW$T$5, DW_AT_name("signed char")
     181                            .dwattr $C$DW$T$5, DW_AT_byte_size(0x01)
     182                    $C$DW$T$6       .dwtag  DW_TAG_base_type
     183                            .dwattr $C$DW$T$6, DW_AT_encoding(DW_ATE_unsigned_char)
     184                            .dwattr $C$DW$T$6, DW_AT_name("unsigned char")
     185                            .dwattr $C$DW$T$6, DW_AT_byte_size(0x01)
     186                    $C$DW$T$7       .dwtag  DW_TAG_base_type
     187                            .dwattr $C$DW$T$7, DW_AT_encoding(DW_ATE_signed_char)
     188                            .dwattr $C$DW$T$7, DW_AT_name("wchar_t")
     189                            .dwattr $C$DW$T$7, DW_AT_byte_size(0x02)
     190                    $C$DW$T$8       .dwtag  DW_TAG_base_type
     191                            .dwattr $C$DW$T$8, DW_AT_encoding(DW_ATE_signed)
     192                            .dwattr $C$DW$T$8, DW_AT_name("short")
     193                            .dwattr $C$DW$T$8, DW_AT_byte_size(0x02)
     194                    $C$DW$T$9       .dwtag  DW_TAG_base_type
     195                            .dwattr $C$DW$T$9, DW_AT_encoding(DW_ATE_unsigned)
     196                            .dwattr $C$DW$T$9, DW_AT_name("unsigned short")
     197                            .dwattr $C$DW$T$9, DW_AT_byte_size(0x02)
     198                    $C$DW$T$10      .dwtag  DW_TAG_base_type
     199                            .dwattr $C$DW$T$10, DW_AT_encoding(DW_ATE_signed)
     200                            .dwattr $C$DW$T$10, DW_AT_name("int")
     201                            .dwattr $C$DW$T$10, DW_AT_byte_size(0x04)
     202                    $C$DW$T$11      .dwtag  DW_TAG_base_type
     203                            .dwattr $C$DW$T$11, DW_AT_encoding(DW_ATE_unsigned)
     204                            .dwattr $C$DW$T$11, DW_AT_name("unsigned int")
     205                            .dwattr $C$DW$T$11, DW_AT_byte_size(0x04)
     206                    $C$DW$T$19      .dwtag  DW_TAG_typedef, DW_AT_name("uint32_t")
     207                            .dwattr $C$DW$T$19, DW_AT_type(*$C$DW$T$11)
     208                            .dwattr $C$DW$T$19, DW_AT_language(DW_LANG_C)
     209                    $C$DW$T$12      .dwtag  DW_TAG_base_type
     210                            .dwattr $C$DW$T$12, DW_AT_encoding(DW_ATE_signed)
     211                            .dwattr $C$DW$T$12, DW_AT_name("long")
     212                            .dwattr $C$DW$T$12, DW_AT_byte_size(0x08)
     213                            .dwattr $C$DW$T$12, DW_AT_bit_size(0x28)
     214                            .dwattr $C$DW$T$12, DW_AT_bit_offset(0x18)
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    5

     215                    $C$DW$T$13      .dwtag  DW_TAG_base_type
     216                            .dwattr $C$DW$T$13, DW_AT_encoding(DW_ATE_unsigned)
     217                            .dwattr $C$DW$T$13, DW_AT_name("unsigned long")
     218                            .dwattr $C$DW$T$13, DW_AT_byte_size(0x08)
     219                            .dwattr $C$DW$T$13, DW_AT_bit_size(0x28)
     220                            .dwattr $C$DW$T$13, DW_AT_bit_offset(0x18)
     221                    $C$DW$T$14      .dwtag  DW_TAG_base_type
     222                            .dwattr $C$DW$T$14, DW_AT_encoding(DW_ATE_signed)
     223                            .dwattr $C$DW$T$14, DW_AT_name("long long")
     224                            .dwattr $C$DW$T$14, DW_AT_byte_size(0x08)
     225                    $C$DW$T$15      .dwtag  DW_TAG_base_type
     226                            .dwattr $C$DW$T$15, DW_AT_encoding(DW_ATE_unsigned)
     227                            .dwattr $C$DW$T$15, DW_AT_name("unsigned long long")
     228                            .dwattr $C$DW$T$15, DW_AT_byte_size(0x08)
     229                    $C$DW$T$32      .dwtag  DW_TAG_typedef, DW_AT_name("uint64_t")
     230                            .dwattr $C$DW$T$32, DW_AT_type(*$C$DW$T$15)
     231                            .dwattr $C$DW$T$32, DW_AT_language(DW_LANG_C)
     232                    $C$DW$T$16      .dwtag  DW_TAG_base_type
     233                            .dwattr $C$DW$T$16, DW_AT_encoding(DW_ATE_float)
     234                            .dwattr $C$DW$T$16, DW_AT_name("float")
     235                            .dwattr $C$DW$T$16, DW_AT_byte_size(0x04)
     236                    $C$DW$T$17      .dwtag  DW_TAG_base_type
     237                            .dwattr $C$DW$T$17, DW_AT_encoding(DW_ATE_float)
     238                            .dwattr $C$DW$T$17, DW_AT_name("double")
     239                            .dwattr $C$DW$T$17, DW_AT_byte_size(0x08)
     240                    $C$DW$T$18      .dwtag  DW_TAG_base_type
     241                            .dwattr $C$DW$T$18, DW_AT_encoding(DW_ATE_float)
     242                            .dwattr $C$DW$T$18, DW_AT_name("long double")
     243                            .dwattr $C$DW$T$18, DW_AT_byte_size(0x08)
     244                    $C$DW$T$25      .dwtag  DW_TAG_base_type
     245                            .dwattr $C$DW$T$25, DW_AT_encoding(DW_ATE_signed_char)
     246                            .dwattr $C$DW$T$25, DW_AT_name("signed char")
     247                            .dwattr $C$DW$T$25, DW_AT_byte_size(0x01)
     248                    $C$DW$T$26      .dwtag  DW_TAG_const_type
     249                            .dwattr $C$DW$T$26, DW_AT_type(*$C$DW$T$25)
     250                    $C$DW$T$27      .dwtag  DW_TAG_pointer_type
     251                            .dwattr $C$DW$T$27, DW_AT_type(*$C$DW$T$26)
     252                            .dwattr $C$DW$T$27, DW_AT_address_class(0x20)
     253                            .dwattr $C$DW$CU, DW_AT_language(DW_LANG_C)
     254                    
     255                    ;***************************************************************
     256                    ;* DWARF REGISTER MAP                                          *
     257                    ;***************************************************************
     258                    
     259                    $C$DW$9 .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A0")
     260                            .dwattr $C$DW$9, DW_AT_location[DW_OP_reg0]
     261                    $C$DW$10        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A1")
     262                            .dwattr $C$DW$10, DW_AT_location[DW_OP_reg1]
     263                    $C$DW$11        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A2")
     264                            .dwattr $C$DW$11, DW_AT_location[DW_OP_reg2]
     265                    $C$DW$12        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A3")
     266                            .dwattr $C$DW$12, DW_AT_location[DW_OP_reg3]
     267                    $C$DW$13        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A4")
     268                            .dwattr $C$DW$13, DW_AT_location[DW_OP_reg4]
     269                    $C$DW$14        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A5")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    6

     270                            .dwattr $C$DW$14, DW_AT_location[DW_OP_reg5]
     271                    $C$DW$15        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A6")
     272                            .dwattr $C$DW$15, DW_AT_location[DW_OP_reg6]
     273                    $C$DW$16        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A7")
     274                            .dwattr $C$DW$16, DW_AT_location[DW_OP_reg7]
     275                    $C$DW$17        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A8")
     276                            .dwattr $C$DW$17, DW_AT_location[DW_OP_reg8]
     277                    $C$DW$18        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A9")
     278                            .dwattr $C$DW$18, DW_AT_location[DW_OP_reg9]
     279                    $C$DW$19        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A10")
     280                            .dwattr $C$DW$19, DW_AT_location[DW_OP_reg10]
     281                    $C$DW$20        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A11")
     282                            .dwattr $C$DW$20, DW_AT_location[DW_OP_reg11]
     283                    $C$DW$21        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A12")
     284                            .dwattr $C$DW$21, DW_AT_location[DW_OP_reg12]
     285                    $C$DW$22        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A13")
     286                            .dwattr $C$DW$22, DW_AT_location[DW_OP_reg13]
     287                    $C$DW$23        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A14")
     288                            .dwattr $C$DW$23, DW_AT_location[DW_OP_reg14]
     289                    $C$DW$24        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A15")
     290                            .dwattr $C$DW$24, DW_AT_location[DW_OP_reg15]
     291                    $C$DW$25        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B0")
     292                            .dwattr $C$DW$25, DW_AT_location[DW_OP_reg16]
     293                    $C$DW$26        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B1")
     294                            .dwattr $C$DW$26, DW_AT_location[DW_OP_reg17]
     295                    $C$DW$27        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B2")
     296                            .dwattr $C$DW$27, DW_AT_location[DW_OP_reg18]
     297                    $C$DW$28        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B3")
     298                            .dwattr $C$DW$28, DW_AT_location[DW_OP_reg19]
     299                    $C$DW$29        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B4")
     300                            .dwattr $C$DW$29, DW_AT_location[DW_OP_reg20]
     301                    $C$DW$30        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B5")
     302                            .dwattr $C$DW$30, DW_AT_location[DW_OP_reg21]
     303                    $C$DW$31        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B6")
     304                            .dwattr $C$DW$31, DW_AT_location[DW_OP_reg22]
     305                    $C$DW$32        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B7")
     306                            .dwattr $C$DW$32, DW_AT_location[DW_OP_reg23]
     307                    $C$DW$33        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B8")
     308                            .dwattr $C$DW$33, DW_AT_location[DW_OP_reg24]
     309                    $C$DW$34        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B9")
     310                            .dwattr $C$DW$34, DW_AT_location[DW_OP_reg25]
     311                    $C$DW$35        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B10")
     312                            .dwattr $C$DW$35, DW_AT_location[DW_OP_reg26]
     313                    $C$DW$36        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B11")
     314                            .dwattr $C$DW$36, DW_AT_location[DW_OP_reg27]
     315                    $C$DW$37        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B12")
     316                            .dwattr $C$DW$37, DW_AT_location[DW_OP_reg28]
     317                    $C$DW$38        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B13")
     318                            .dwattr $C$DW$38, DW_AT_location[DW_OP_reg29]
     319                    $C$DW$39        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DP")
     320                            .dwattr $C$DW$39, DW_AT_location[DW_OP_reg30]
     321                    $C$DW$40        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("SP")
     322                            .dwattr $C$DW$40, DW_AT_location[DW_OP_reg31]
     323                    $C$DW$41        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FP")
     324                            .dwattr $C$DW$41, DW_AT_location[DW_OP_regx 0x20]
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    7

     325                    $C$DW$42        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("PC")
     326                            .dwattr $C$DW$42, DW_AT_location[DW_OP_regx 0x21]
     327                    $C$DW$43        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IRP")
     328                            .dwattr $C$DW$43, DW_AT_location[DW_OP_regx 0x22]
     329                    $C$DW$44        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IFR")
     330                            .dwattr $C$DW$44, DW_AT_location[DW_OP_regx 0x23]
     331                    $C$DW$45        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("NRP")
     332                            .dwattr $C$DW$45, DW_AT_location[DW_OP_regx 0x24]
     333                    $C$DW$46        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A16")
     334                            .dwattr $C$DW$46, DW_AT_location[DW_OP_regx 0x25]
     335                    $C$DW$47        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A17")
     336                            .dwattr $C$DW$47, DW_AT_location[DW_OP_regx 0x26]
     337                    $C$DW$48        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A18")
     338                            .dwattr $C$DW$48, DW_AT_location[DW_OP_regx 0x27]
     339                    $C$DW$49        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A19")
     340                            .dwattr $C$DW$49, DW_AT_location[DW_OP_regx 0x28]
     341                    $C$DW$50        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A20")
     342                            .dwattr $C$DW$50, DW_AT_location[DW_OP_regx 0x29]
     343                    $C$DW$51        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A21")
     344                            .dwattr $C$DW$51, DW_AT_location[DW_OP_regx 0x2a]
     345                    $C$DW$52        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A22")
     346                            .dwattr $C$DW$52, DW_AT_location[DW_OP_regx 0x2b]
     347                    $C$DW$53        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A23")
     348                            .dwattr $C$DW$53, DW_AT_location[DW_OP_regx 0x2c]
     349                    $C$DW$54        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A24")
     350                            .dwattr $C$DW$54, DW_AT_location[DW_OP_regx 0x2d]
     351                    $C$DW$55        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A25")
     352                            .dwattr $C$DW$55, DW_AT_location[DW_OP_regx 0x2e]
     353                    $C$DW$56        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A26")
     354                            .dwattr $C$DW$56, DW_AT_location[DW_OP_regx 0x2f]
     355                    $C$DW$57        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A27")
     356                            .dwattr $C$DW$57, DW_AT_location[DW_OP_regx 0x30]
     357                    $C$DW$58        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A28")
     358                            .dwattr $C$DW$58, DW_AT_location[DW_OP_regx 0x31]
     359                    $C$DW$59        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A29")
     360                            .dwattr $C$DW$59, DW_AT_location[DW_OP_regx 0x32]
     361                    $C$DW$60        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A30")
     362                            .dwattr $C$DW$60, DW_AT_location[DW_OP_regx 0x33]
     363                    $C$DW$61        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A31")
     364                            .dwattr $C$DW$61, DW_AT_location[DW_OP_regx 0x34]
     365                    $C$DW$62        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B16")
     366                            .dwattr $C$DW$62, DW_AT_location[DW_OP_regx 0x35]
     367                    $C$DW$63        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B17")
     368                            .dwattr $C$DW$63, DW_AT_location[DW_OP_regx 0x36]
     369                    $C$DW$64        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B18")
     370                            .dwattr $C$DW$64, DW_AT_location[DW_OP_regx 0x37]
     371                    $C$DW$65        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B19")
     372                            .dwattr $C$DW$65, DW_AT_location[DW_OP_regx 0x38]
     373                    $C$DW$66        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B20")
     374                            .dwattr $C$DW$66, DW_AT_location[DW_OP_regx 0x39]
     375                    $C$DW$67        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B21")
     376                            .dwattr $C$DW$67, DW_AT_location[DW_OP_regx 0x3a]
     377                    $C$DW$68        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B22")
     378                            .dwattr $C$DW$68, DW_AT_location[DW_OP_regx 0x3b]
     379                    $C$DW$69        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B23")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    8

     380                            .dwattr $C$DW$69, DW_AT_location[DW_OP_regx 0x3c]
     381                    $C$DW$70        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B24")
     382                            .dwattr $C$DW$70, DW_AT_location[DW_OP_regx 0x3d]
     383                    $C$DW$71        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B25")
     384                            .dwattr $C$DW$71, DW_AT_location[DW_OP_regx 0x3e]
     385                    $C$DW$72        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B26")
     386                            .dwattr $C$DW$72, DW_AT_location[DW_OP_regx 0x3f]
     387                    $C$DW$73        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B27")
     388                            .dwattr $C$DW$73, DW_AT_location[DW_OP_regx 0x40]
     389                    $C$DW$74        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B28")
     390                            .dwattr $C$DW$74, DW_AT_location[DW_OP_regx 0x41]
     391                    $C$DW$75        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B29")
     392                            .dwattr $C$DW$75, DW_AT_location[DW_OP_regx 0x42]
     393                    $C$DW$76        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B30")
     394                            .dwattr $C$DW$76, DW_AT_location[DW_OP_regx 0x43]
     395                    $C$DW$77        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B31")
     396                            .dwattr $C$DW$77, DW_AT_location[DW_OP_regx 0x44]
     397                    $C$DW$78        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("AMR")
     398                            .dwattr $C$DW$78, DW_AT_location[DW_OP_regx 0x45]
     399                    $C$DW$79        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("CSR")
     400                            .dwattr $C$DW$79, DW_AT_location[DW_OP_regx 0x46]
     401                    $C$DW$80        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ISR")
     402                            .dwattr $C$DW$80, DW_AT_location[DW_OP_regx 0x47]
     403                    $C$DW$81        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ICR")
     404                            .dwattr $C$DW$81, DW_AT_location[DW_OP_regx 0x48]
     405                    $C$DW$82        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IER")
     406                            .dwattr $C$DW$82, DW_AT_location[DW_OP_regx 0x49]
     407                    $C$DW$83        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ISTP")
     408                            .dwattr $C$DW$83, DW_AT_location[DW_OP_regx 0x4a]
     409                    $C$DW$84        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IN")
     410                            .dwattr $C$DW$84, DW_AT_location[DW_OP_regx 0x4b]
     411                    $C$DW$85        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("OUT")
     412                            .dwattr $C$DW$85, DW_AT_location[DW_OP_regx 0x4c]
     413                    $C$DW$86        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ACR")
     414                            .dwattr $C$DW$86, DW_AT_location[DW_OP_regx 0x4d]
     415                    $C$DW$87        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ADR")
     416                            .dwattr $C$DW$87, DW_AT_location[DW_OP_regx 0x4e]
     417                    $C$DW$88        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FADCR")
     418                            .dwattr $C$DW$88, DW_AT_location[DW_OP_regx 0x4f]
     419                    $C$DW$89        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FAUCR")
     420                            .dwattr $C$DW$89, DW_AT_location[DW_OP_regx 0x50]
     421                    $C$DW$90        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FMCR")
     422                            .dwattr $C$DW$90, DW_AT_location[DW_OP_regx 0x51]
     423                    $C$DW$91        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("GFPGFR")
     424                            .dwattr $C$DW$91, DW_AT_location[DW_OP_regx 0x52]
     425                    $C$DW$92        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DIER")
     426                            .dwattr $C$DW$92, DW_AT_location[DW_OP_regx 0x53]
     427                    $C$DW$93        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("REP")
     428                            .dwattr $C$DW$93, DW_AT_location[DW_OP_regx 0x54]
     429                    $C$DW$94        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TSCL")
     430                            .dwattr $C$DW$94, DW_AT_location[DW_OP_regx 0x55]
     431                    $C$DW$95        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TSCH")
     432                            .dwattr $C$DW$95, DW_AT_location[DW_OP_regx 0x56]
     433                    $C$DW$96        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ARP")
     434                            .dwattr $C$DW$96, DW_AT_location[DW_OP_regx 0x57]
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    9

     435                    $C$DW$97        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ILC")
     436                            .dwattr $C$DW$97, DW_AT_location[DW_OP_regx 0x58]
     437                    $C$DW$98        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RILC")
     438                            .dwattr $C$DW$98, DW_AT_location[DW_OP_regx 0x59]
     439                    $C$DW$99        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DNUM")
     440                            .dwattr $C$DW$99, DW_AT_location[DW_OP_regx 0x5a]
     441                    $C$DW$100       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("SSR")
     442                            .dwattr $C$DW$100, DW_AT_location[DW_OP_regx 0x5b]
     443                    $C$DW$101       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("GPLYA")
     444                            .dwattr $C$DW$101, DW_AT_location[DW_OP_regx 0x5c]
     445                    $C$DW$102       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("GPLYB")
     446                            .dwattr $C$DW$102, DW_AT_location[DW_OP_regx 0x5d]
     447                    $C$DW$103       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TSR")
     448                            .dwattr $C$DW$103, DW_AT_location[DW_OP_regx 0x5e]
     449                    $C$DW$104       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ITSR")
     450                            .dwattr $C$DW$104, DW_AT_location[DW_OP_regx 0x5f]
     451                    $C$DW$105       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("NTSR")
     452                            .dwattr $C$DW$105, DW_AT_location[DW_OP_regx 0x60]
     453                    $C$DW$106       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("EFR")
     454                            .dwattr $C$DW$106, DW_AT_location[DW_OP_regx 0x61]
     455                    $C$DW$107       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ECR")
     456                            .dwattr $C$DW$107, DW_AT_location[DW_OP_regx 0x62]
     457                    $C$DW$108       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IERR")
     458                            .dwattr $C$DW$108, DW_AT_location[DW_OP_regx 0x63]
     459                    $C$DW$109       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DMSG")
     460                            .dwattr $C$DW$109, DW_AT_location[DW_OP_regx 0x64]
     461                    $C$DW$110       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("CMSG")
     462                            .dwattr $C$DW$110, DW_AT_location[DW_OP_regx 0x65]
     463                    $C$DW$111       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DT_DMA_ADDR")
     464                            .dwattr $C$DW$111, DW_AT_location[DW_OP_regx 0x66]
     465                    $C$DW$112       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DT_DMA_DATA")
     466                            .dwattr $C$DW$112, DW_AT_location[DW_OP_regx 0x67]
     467                    $C$DW$113       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DT_DMA_CNTL")
     468                            .dwattr $C$DW$113, DW_AT_location[DW_OP_regx 0x68]
     469                    $C$DW$114       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TCU_CNTL")
     470                            .dwattr $C$DW$114, DW_AT_location[DW_OP_regx 0x69]
     471                    $C$DW$115       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_REC_CNTL")
     472                            .dwattr $C$DW$115, DW_AT_location[DW_OP_regx 0x6a]
     473                    $C$DW$116       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_XMT_CNTL")
     474                            .dwattr $C$DW$116, DW_AT_location[DW_OP_regx 0x6b]
     475                    $C$DW$117       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_CFG")
     476                            .dwattr $C$DW$117, DW_AT_location[DW_OP_regx 0x6c]
     477                    $C$DW$118       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_RDATA")
     478                            .dwattr $C$DW$118, DW_AT_location[DW_OP_regx 0x6d]
     479                    $C$DW$119       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_WDATA")
     480                            .dwattr $C$DW$119, DW_AT_location[DW_OP_regx 0x6e]
     481                    $C$DW$120       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_RADDR")
     482                            .dwattr $C$DW$120, DW_AT_location[DW_OP_regx 0x6f]
     483                    $C$DW$121       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_WADDR")
     484                            .dwattr $C$DW$121, DW_AT_location[DW_OP_regx 0x70]
     485                    $C$DW$122       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("MFREG0")
     486                            .dwattr $C$DW$122, DW_AT_location[DW_OP_regx 0x71]
     487                    $C$DW$123       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DBG_STAT")
     488                            .dwattr $C$DW$123, DW_AT_location[DW_OP_regx 0x72]
     489                    $C$DW$124       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("BRK_EN")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:34:46 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE   10

     490                            .dwattr $C$DW$124, DW_AT_location[DW_OP_regx 0x73]
     491                    $C$DW$125       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP0_CNT")
     492                            .dwattr $C$DW$125, DW_AT_location[DW_OP_regx 0x74]
     493                    $C$DW$126       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP0")
     494                            .dwattr $C$DW$126, DW_AT_location[DW_OP_regx 0x75]
     495                    $C$DW$127       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP1")
     496                            .dwattr $C$DW$127, DW_AT_location[DW_OP_regx 0x76]
     497                    $C$DW$128       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP2")
     498                            .dwattr $C$DW$128, DW_AT_location[DW_OP_regx 0x77]
     499                    $C$DW$129       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP3")
     500                            .dwattr $C$DW$129, DW_AT_location[DW_OP_regx 0x78]
     501                    $C$DW$130       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("OVERLAY")
     502                            .dwattr $C$DW$130, DW_AT_location[DW_OP_regx 0x79]
     503                    $C$DW$131       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("PC_PROF")
     504                            .dwattr $C$DW$131, DW_AT_location[DW_OP_regx 0x7a]
     505                    $C$DW$132       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ATSR")
     506                            .dwattr $C$DW$132, DW_AT_location[DW_OP_regx 0x7b]
     507                    $C$DW$133       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TRR")
     508                            .dwattr $C$DW$133, DW_AT_location[DW_OP_regx 0x7c]
     509                    $C$DW$134       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TCRR")
     510                            .dwattr $C$DW$134, DW_AT_location[DW_OP_regx 0x7d]
     511                    $C$DW$135       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DESR")
     512                            .dwattr $C$DW$135, DW_AT_location[DW_OP_regx 0x7e]
     513                    $C$DW$136       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DETR")
     514                            .dwattr $C$DW$136, DW_AT_location[DW_OP_regx 0x7f]
     515                    $C$DW$137       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("CIE_RETA")
     516                            .dwattr $C$DW$137, DW_AT_location[DW_OP_regx 0xe4]
     517                            .dwendtag $C$DW$CU
     518                    

No Assembly Errors, No Assembly Warnings

8168.crap-O1-out.txt
[C674X_0] 100 111111

2313.crap-O2-lst.txt
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    1

       1                    ;******************************************************************************
       2                    ;* TMS320C6x C/C++ Codegen                                          PC v7.3.4 *
       3                    ;* Date/Time created: Wed Oct 10 12:35:52 2012                                *
       4                    ;******************************************************************************
       5                            .compiler_opts --abi=coffabi --c64p_l1d_workaround=off --endian=little --hll_source=on --long_
       6                    
       7                    ;******************************************************************************
       8                    ;* GLOBAL FILE PARAMETERS                                                     *
       9                    ;*                                                                            *
      10                    ;*   Architecture      : TMS320C674x                                          *
      11                    ;*   Optimization      : Enabled at level 2                                   *
      12                    ;*   Optimizing for    : Speed                                                *
      13                    ;*                       Based on options: -o2, no -ms                        *
      14                    ;*   Endian            : Little                                               *
      15                    ;*   Interrupt Thrshld : Disabled                                             *
      16                    ;*   Data Access Model : Far Aggregate Data                                   *
      17                    ;*   Pipelining        : Enabled                                              *
      18                    ;*   Speculate Loads   : Enabled with threshold = 0                           *
      19                    ;*   Memory Aliases    : Presume are aliases (pessimistic)                    *
      20                    ;*   Debug Info        : DWARF Debug for Program Analysis w/Optimization      *
      21                    ;*                                                                            *
      22                    ;******************************************************************************
      23                    
      24                            .asg    A15, FP
      25                            .asg    B14, DP
      26                            .asg    B15, SP
      27                            .global $bss
      28                    
      29                    
      30                    $C$DW$CU        .dwtag  DW_TAG_compile_unit
      31                            .dwattr $C$DW$CU, DW_AT_name("../crap.c")
      32                            .dwattr $C$DW$CU, DW_AT_producer("TMS320C6x C/C++ Codegen PC v7.3.4 Copyright (c) 1996-2012 Te
      33                            .dwattr $C$DW$CU, DW_AT_TI_version(0x01)
      34                            .dwattr $C$DW$CU, DW_AT_comp_dir("C:\Projects\XSENSOR\PSMNG\SCT\WIP\Software\dsp_only_hid_ccsv
      35                    
      36                    $C$DW$1 .dwtag  DW_TAG_subprogram, DW_AT_name("printf")
      37                            .dwattr $C$DW$1, DW_AT_TI_symbol_name("_printf")
      38                            .dwattr $C$DW$1, DW_AT_type(*$C$DW$T$10)
      39                            .dwattr $C$DW$1, DW_AT_declaration
      40                            .dwattr $C$DW$1, DW_AT_external
      41                    $C$DW$2 .dwtag  DW_TAG_formal_parameter
      42                            .dwattr $C$DW$2, DW_AT_type(*$C$DW$T$27)
      43                    $C$DW$3 .dwtag  DW_TAG_unspecified_parameters
      44                            .dwendtag $C$DW$1
      45                    
      46                    ;       C:\ti\ccsv5\tools\compiler\c6000_7.3.4\bin\opt6x.exe C:\\DOCUME~1\\nwong.SCT\\LOCALS~1\\Temp\\
      47 00000000                   .sect   ".text"
      48                            .clink
      49                            .global _crap
      50                    
      51                    $C$DW$4 .dwtag  DW_TAG_subprogram, DW_AT_name("crap")
      52                            .dwattr $C$DW$4, DW_AT_low_pc(_crap)
      53                            .dwattr $C$DW$4, DW_AT_high_pc(0x00)
      54                            .dwattr $C$DW$4, DW_AT_TI_symbol_name("_crap")
      55                            .dwattr $C$DW$4, DW_AT_external
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    2

      56                            .dwattr $C$DW$4, DW_AT_TI_begin_file("../crap.c")
      57                            .dwattr $C$DW$4, DW_AT_TI_begin_line(0x07)
      58                            .dwattr $C$DW$4, DW_AT_TI_begin_column(0x06)
      59                            .dwattr $C$DW$4, DW_AT_TI_max_frame_size(0x18)
      60                            .dwattr $C$DW$4, DW_AT_frame_base[DW_OP_breg31 24]
      61                            .dwattr $C$DW$4, DW_AT_TI_skeletal
      62                            .dwpsn  file "../crap.c",line 8,column 1,is_stmt,address _crap
      63                    $C$DW$5 .dwtag  DW_TAG_formal_parameter, DW_AT_name("ulFreqKHz_")
      64                            .dwattr $C$DW$5, DW_AT_TI_symbol_name("_ulFreqKHz_")
      65                            .dwattr $C$DW$5, DW_AT_type(*$C$DW$T$19)
      66                            .dwattr $C$DW$5, DW_AT_location[DW_OP_reg4]
      67                    ;----------------------------------------------------------------------
      68                    ;   7 | void crap(uint32_t ulFreqKHz_)                                         
      69                    ;----------------------------------------------------------------------
      70                    
      71                    ;******************************************************************************
      72                    ;* FUNCTION NAME: crap                                                        *
      73                    ;*                                                                            *
      74                    ;*   Regs Modified     : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B0,B1,B2,B3,B4,*
      75                    ;*                           B5,B6,B7,B8,B9,SP,A16,A17,A18,A19,A20,A21,A22,   *
      76                    ;*                           A23,A24,A25,A26,A27,A28,A29,A30,A31,B16,B17,B18, *
      77                    ;*                           B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30, *
      78                    ;*                           B31                                              *
      79                    ;*   Regs Used         : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B0,B1,B2,B3,B4,*
      80                    ;*                           B5,B6,B7,B8,B9,DP,SP,A16,A17,A18,A19,A20,A21,A22,*
      81                    ;*                           A23,A24,A25,A26,A27,A28,A29,A30,A31,B16,B17,B18, *
      82                    ;*                           B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30, *
      83                    ;*                           B31                                              *
      84                    ;*   Local Frame Size  : 16 Args + 0 Auto + 8 Save = 24 byte                  *
      85                    ;******************************************************************************
      86 00000000           _crap:
      87                    ;** --------------------------------------------------------------------------*
      88                    ;----------------------------------------------------------------------
      89                    ;   9 | uint64_t ullFreqReg;                                                   
      90                    ;  10 | uint32_t ulFreqReg;                                                    
      91                    ;  11 | ullFreqReg  = FREQ_BIT_RESOLUTION;                                     
      92                    ;  12 | ullFreqReg *= ulFreqKHz_;                                              
      93                    ;  13 | ullFreqReg /= DSP_CLKIN_KHZ;                                           
      94                    ;  14 | ulFreqReg   = (uint32_t)ullFreqReg;                                    
      95                    ;----------------------------------------------------------------------
      96 00000000 05bcd4f4             STW     .D2T1   A11,*SP--(24)     ; |8| 
      97                    
      98 00000004 053ca2f5             STW     .D2T1   A10,*+SP(20)      ; |8| 
      99 0000000c     4646  ||         MV      .L1     A4,A10            ; |8| 
     100 00000008 022ee02b  ||         MVK     .S2     0x5dc0,B4         ; |15| 
     101                    
     102                    $C$DW$6 .dwtag  DW_TAG_TI_branch
     103                            .dwattr $C$DW$6, DW_AT_low_pc(0x04)
     104                            .dwattr $C$DW$6, DW_AT_name("__divull")
     105                            .dwattr $C$DW$6, DW_AT_TI_call
     106                    
     107 0000000e     75c6             MV      .L1X    B3,A11            ; |8| 
     108 00000010 10000013! ||         CALLP   .S2     __divull,B3
     109 00000014 022b8ca1  ||         SHL     .S1     A10,28,A4         ; |15| 
     110 00000018     1af6  ||         ZERO    .D1     A5                ; |15| 
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    3

     111 0000001a     06a7  ||         ZERO    .L2     B5                ; |15| 
     112                    
     113                            .dwpsn  file "../crap.c",line 15,column 3,is_stmt
     114                    ;----------------------------------------------------------------------
     115                    ;  15 | printf("%d %x\n", ulFreqKHz_, ulFreqReg);                              
     116                    ;----------------------------------------------------------------------
     117 00000020           $C$RL2:    ; CALL OCCURS {__divull} {0}      ; |15| 
     118                    ;** --------------------------------------------------------------------------*
     119                    
     120 00000020 0200002b%            MVKL    .S2     $C$SL1+0,B4
     121 00000024 023c62f4  ||         STW     .D2T1   A4,*+SP(12)       ; |15| 
     122                    
     123 00000028 0200006b%            MVKH    .S2     $C$SL1+0,B4
     124 0000002c 053c42f4  ||         STW     .D2T1   A10,*+SP(8)       ; |15| 
     125                    
     126                    $C$DW$7 .dwtag  DW_TAG_TI_branch
     127                            .dwattr $C$DW$7, DW_AT_low_pc(0x00)
     128                            .dwattr $C$DW$7, DW_AT_name("_printf")
     129                            .dwattr $C$DW$7, DW_AT_TI_call
     130                    
     131 00000030 1ffffc13!            CALLP   .S2     _printf,B3
     132 00000034     bc45  ||         STW     .D2T2   B4,*+SP(4)        ; |15| 
     133                    
     134 00000036           $C$RL3:    ; CALL OCCURS {_printf} {0}       ; |15| 
     135                    ;** --------------------------------------------------------------------------*
     136                            .dwpsn  file "../crap.c",line 16,column 1,is_stmt
     137 00000036     7587             MV      .L2X    A11,B3            ; |16| 
     138                    $C$DW$8 .dwtag  DW_TAG_TI_branch
     139                            .dwattr $C$DW$8, DW_AT_low_pc(0x00)
     140                            .dwattr $C$DW$8, DW_AT_TI_return
     141                    
     142 00000040 000c0362             RET     .S2     B3                ; |16| 
     143 00000038 053ca2e5  ||         LDW     .D2T1   *+SP(20),A10      ; |16| 
     144                    
     145 00000044 05bcd2e4             LDW     .D2T1   *++SP(24),A11     ; |16| 
     146 00000048 00006000             NOP             4
     147                               ; BRANCH OCCURS {B3}              ; |16| 
     148                            .dwattr $C$DW$4, DW_AT_TI_end_file("../crap.c")
     149                            .dwattr $C$DW$4, DW_AT_TI_end_line(0x10)
     150                            .dwattr $C$DW$4, DW_AT_TI_end_column(0x01)
     151                            .dwendtag $C$DW$4
     152                    
     153                    ;******************************************************************************
     154                    ;* STRINGS                                                                    *
     155                    ;******************************************************************************
     156 00000000                   .sect   ".const:.string"
     157 00000000 00000025  $C$SL1: .string "%d %x",10,0
         00000001 00000064 
         00000002 00000020 
         00000003 00000025 
         00000004 00000078 
         00000005 0000000A 
         00000006 00000000 
     158                    ;*****************************************************************************
     159                    ;* UNDEFINED EXTERNAL REFERENCES                                             *
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    4

     160                    ;*****************************************************************************
     161                            .global _printf
     162                            .global __divull
     163                    
     164                    ;******************************************************************************
     165                    ;* BUILD ATTRIBUTES                                                           *
     166                    ;******************************************************************************
     167                            .battr "TI", Tag_File, 1, Tag_ABI_stack_align_needed(0)
     168                            .battr "TI", Tag_File, 1, Tag_ABI_stack_align_preserved(0)
     169                            .battr "TI", Tag_File, 1, Tag_Tramps_Use_SOC(1)
     170                    
     171                    ;******************************************************************************
     172                    ;* TYPE INFORMATION                                                           *
     173                    ;******************************************************************************
     174                    $C$DW$T$4       .dwtag  DW_TAG_base_type
     175                            .dwattr $C$DW$T$4, DW_AT_encoding(DW_ATE_boolean)
     176                            .dwattr $C$DW$T$4, DW_AT_name("bool")
     177                            .dwattr $C$DW$T$4, DW_AT_byte_size(0x01)
     178                    $C$DW$T$5       .dwtag  DW_TAG_base_type
     179                            .dwattr $C$DW$T$5, DW_AT_encoding(DW_ATE_signed_char)
     180                            .dwattr $C$DW$T$5, DW_AT_name("signed char")
     181                            .dwattr $C$DW$T$5, DW_AT_byte_size(0x01)
     182                    $C$DW$T$6       .dwtag  DW_TAG_base_type
     183                            .dwattr $C$DW$T$6, DW_AT_encoding(DW_ATE_unsigned_char)
     184                            .dwattr $C$DW$T$6, DW_AT_name("unsigned char")
     185                            .dwattr $C$DW$T$6, DW_AT_byte_size(0x01)
     186                    $C$DW$T$7       .dwtag  DW_TAG_base_type
     187                            .dwattr $C$DW$T$7, DW_AT_encoding(DW_ATE_signed_char)
     188                            .dwattr $C$DW$T$7, DW_AT_name("wchar_t")
     189                            .dwattr $C$DW$T$7, DW_AT_byte_size(0x02)
     190                    $C$DW$T$8       .dwtag  DW_TAG_base_type
     191                            .dwattr $C$DW$T$8, DW_AT_encoding(DW_ATE_signed)
     192                            .dwattr $C$DW$T$8, DW_AT_name("short")
     193                            .dwattr $C$DW$T$8, DW_AT_byte_size(0x02)
     194                    $C$DW$T$9       .dwtag  DW_TAG_base_type
     195                            .dwattr $C$DW$T$9, DW_AT_encoding(DW_ATE_unsigned)
     196                            .dwattr $C$DW$T$9, DW_AT_name("unsigned short")
     197                            .dwattr $C$DW$T$9, DW_AT_byte_size(0x02)
     198                    $C$DW$T$10      .dwtag  DW_TAG_base_type
     199                            .dwattr $C$DW$T$10, DW_AT_encoding(DW_ATE_signed)
     200                            .dwattr $C$DW$T$10, DW_AT_name("int")
     201                            .dwattr $C$DW$T$10, DW_AT_byte_size(0x04)
     202                    $C$DW$T$11      .dwtag  DW_TAG_base_type
     203                            .dwattr $C$DW$T$11, DW_AT_encoding(DW_ATE_unsigned)
     204                            .dwattr $C$DW$T$11, DW_AT_name("unsigned int")
     205                            .dwattr $C$DW$T$11, DW_AT_byte_size(0x04)
     206                    $C$DW$T$19      .dwtag  DW_TAG_typedef, DW_AT_name("uint32_t")
     207                            .dwattr $C$DW$T$19, DW_AT_type(*$C$DW$T$11)
     208                            .dwattr $C$DW$T$19, DW_AT_language(DW_LANG_C)
     209                    $C$DW$T$12      .dwtag  DW_TAG_base_type
     210                            .dwattr $C$DW$T$12, DW_AT_encoding(DW_ATE_signed)
     211                            .dwattr $C$DW$T$12, DW_AT_name("long")
     212                            .dwattr $C$DW$T$12, DW_AT_byte_size(0x08)
     213                            .dwattr $C$DW$T$12, DW_AT_bit_size(0x28)
     214                            .dwattr $C$DW$T$12, DW_AT_bit_offset(0x18)
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    5

     215                    $C$DW$T$13      .dwtag  DW_TAG_base_type
     216                            .dwattr $C$DW$T$13, DW_AT_encoding(DW_ATE_unsigned)
     217                            .dwattr $C$DW$T$13, DW_AT_name("unsigned long")
     218                            .dwattr $C$DW$T$13, DW_AT_byte_size(0x08)
     219                            .dwattr $C$DW$T$13, DW_AT_bit_size(0x28)
     220                            .dwattr $C$DW$T$13, DW_AT_bit_offset(0x18)
     221                    $C$DW$T$14      .dwtag  DW_TAG_base_type
     222                            .dwattr $C$DW$T$14, DW_AT_encoding(DW_ATE_signed)
     223                            .dwattr $C$DW$T$14, DW_AT_name("long long")
     224                            .dwattr $C$DW$T$14, DW_AT_byte_size(0x08)
     225                    $C$DW$T$15      .dwtag  DW_TAG_base_type
     226                            .dwattr $C$DW$T$15, DW_AT_encoding(DW_ATE_unsigned)
     227                            .dwattr $C$DW$T$15, DW_AT_name("unsigned long long")
     228                            .dwattr $C$DW$T$15, DW_AT_byte_size(0x08)
     229                    $C$DW$T$32      .dwtag  DW_TAG_typedef, DW_AT_name("uint64_t")
     230                            .dwattr $C$DW$T$32, DW_AT_type(*$C$DW$T$15)
     231                            .dwattr $C$DW$T$32, DW_AT_language(DW_LANG_C)
     232                    $C$DW$T$16      .dwtag  DW_TAG_base_type
     233                            .dwattr $C$DW$T$16, DW_AT_encoding(DW_ATE_float)
     234                            .dwattr $C$DW$T$16, DW_AT_name("float")
     235                            .dwattr $C$DW$T$16, DW_AT_byte_size(0x04)
     236                    $C$DW$T$17      .dwtag  DW_TAG_base_type
     237                            .dwattr $C$DW$T$17, DW_AT_encoding(DW_ATE_float)
     238                            .dwattr $C$DW$T$17, DW_AT_name("double")
     239                            .dwattr $C$DW$T$17, DW_AT_byte_size(0x08)
     240                    $C$DW$T$18      .dwtag  DW_TAG_base_type
     241                            .dwattr $C$DW$T$18, DW_AT_encoding(DW_ATE_float)
     242                            .dwattr $C$DW$T$18, DW_AT_name("long double")
     243                            .dwattr $C$DW$T$18, DW_AT_byte_size(0x08)
     244                    $C$DW$T$25      .dwtag  DW_TAG_base_type
     245                            .dwattr $C$DW$T$25, DW_AT_encoding(DW_ATE_signed_char)
     246                            .dwattr $C$DW$T$25, DW_AT_name("signed char")
     247                            .dwattr $C$DW$T$25, DW_AT_byte_size(0x01)
     248                    $C$DW$T$26      .dwtag  DW_TAG_const_type
     249                            .dwattr $C$DW$T$26, DW_AT_type(*$C$DW$T$25)
     250                    $C$DW$T$27      .dwtag  DW_TAG_pointer_type
     251                            .dwattr $C$DW$T$27, DW_AT_type(*$C$DW$T$26)
     252                            .dwattr $C$DW$T$27, DW_AT_address_class(0x20)
     253                            .dwattr $C$DW$CU, DW_AT_language(DW_LANG_C)
     254                    
     255                    ;***************************************************************
     256                    ;* DWARF REGISTER MAP                                          *
     257                    ;***************************************************************
     258                    
     259                    $C$DW$9 .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A0")
     260                            .dwattr $C$DW$9, DW_AT_location[DW_OP_reg0]
     261                    $C$DW$10        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A1")
     262                            .dwattr $C$DW$10, DW_AT_location[DW_OP_reg1]
     263                    $C$DW$11        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A2")
     264                            .dwattr $C$DW$11, DW_AT_location[DW_OP_reg2]
     265                    $C$DW$12        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A3")
     266                            .dwattr $C$DW$12, DW_AT_location[DW_OP_reg3]
     267                    $C$DW$13        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A4")
     268                            .dwattr $C$DW$13, DW_AT_location[DW_OP_reg4]
     269                    $C$DW$14        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A5")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    6

     270                            .dwattr $C$DW$14, DW_AT_location[DW_OP_reg5]
     271                    $C$DW$15        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A6")
     272                            .dwattr $C$DW$15, DW_AT_location[DW_OP_reg6]
     273                    $C$DW$16        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A7")
     274                            .dwattr $C$DW$16, DW_AT_location[DW_OP_reg7]
     275                    $C$DW$17        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A8")
     276                            .dwattr $C$DW$17, DW_AT_location[DW_OP_reg8]
     277                    $C$DW$18        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A9")
     278                            .dwattr $C$DW$18, DW_AT_location[DW_OP_reg9]
     279                    $C$DW$19        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A10")
     280                            .dwattr $C$DW$19, DW_AT_location[DW_OP_reg10]
     281                    $C$DW$20        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A11")
     282                            .dwattr $C$DW$20, DW_AT_location[DW_OP_reg11]
     283                    $C$DW$21        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A12")
     284                            .dwattr $C$DW$21, DW_AT_location[DW_OP_reg12]
     285                    $C$DW$22        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A13")
     286                            .dwattr $C$DW$22, DW_AT_location[DW_OP_reg13]
     287                    $C$DW$23        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A14")
     288                            .dwattr $C$DW$23, DW_AT_location[DW_OP_reg14]
     289                    $C$DW$24        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A15")
     290                            .dwattr $C$DW$24, DW_AT_location[DW_OP_reg15]
     291                    $C$DW$25        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B0")
     292                            .dwattr $C$DW$25, DW_AT_location[DW_OP_reg16]
     293                    $C$DW$26        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B1")
     294                            .dwattr $C$DW$26, DW_AT_location[DW_OP_reg17]
     295                    $C$DW$27        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B2")
     296                            .dwattr $C$DW$27, DW_AT_location[DW_OP_reg18]
     297                    $C$DW$28        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B3")
     298                            .dwattr $C$DW$28, DW_AT_location[DW_OP_reg19]
     299                    $C$DW$29        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B4")
     300                            .dwattr $C$DW$29, DW_AT_location[DW_OP_reg20]
     301                    $C$DW$30        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B5")
     302                            .dwattr $C$DW$30, DW_AT_location[DW_OP_reg21]
     303                    $C$DW$31        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B6")
     304                            .dwattr $C$DW$31, DW_AT_location[DW_OP_reg22]
     305                    $C$DW$32        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B7")
     306                            .dwattr $C$DW$32, DW_AT_location[DW_OP_reg23]
     307                    $C$DW$33        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B8")
     308                            .dwattr $C$DW$33, DW_AT_location[DW_OP_reg24]
     309                    $C$DW$34        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B9")
     310                            .dwattr $C$DW$34, DW_AT_location[DW_OP_reg25]
     311                    $C$DW$35        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B10")
     312                            .dwattr $C$DW$35, DW_AT_location[DW_OP_reg26]
     313                    $C$DW$36        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B11")
     314                            .dwattr $C$DW$36, DW_AT_location[DW_OP_reg27]
     315                    $C$DW$37        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B12")
     316                            .dwattr $C$DW$37, DW_AT_location[DW_OP_reg28]
     317                    $C$DW$38        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B13")
     318                            .dwattr $C$DW$38, DW_AT_location[DW_OP_reg29]
     319                    $C$DW$39        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DP")
     320                            .dwattr $C$DW$39, DW_AT_location[DW_OP_reg30]
     321                    $C$DW$40        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("SP")
     322                            .dwattr $C$DW$40, DW_AT_location[DW_OP_reg31]
     323                    $C$DW$41        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FP")
     324                            .dwattr $C$DW$41, DW_AT_location[DW_OP_regx 0x20]
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    7

     325                    $C$DW$42        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("PC")
     326                            .dwattr $C$DW$42, DW_AT_location[DW_OP_regx 0x21]
     327                    $C$DW$43        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IRP")
     328                            .dwattr $C$DW$43, DW_AT_location[DW_OP_regx 0x22]
     329                    $C$DW$44        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IFR")
     330                            .dwattr $C$DW$44, DW_AT_location[DW_OP_regx 0x23]
     331                    $C$DW$45        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("NRP")
     332                            .dwattr $C$DW$45, DW_AT_location[DW_OP_regx 0x24]
     333                    $C$DW$46        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A16")
     334                            .dwattr $C$DW$46, DW_AT_location[DW_OP_regx 0x25]
     335                    $C$DW$47        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A17")
     336                            .dwattr $C$DW$47, DW_AT_location[DW_OP_regx 0x26]
     337                    $C$DW$48        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A18")
     338                            .dwattr $C$DW$48, DW_AT_location[DW_OP_regx 0x27]
     339                    $C$DW$49        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A19")
     340                            .dwattr $C$DW$49, DW_AT_location[DW_OP_regx 0x28]
     341                    $C$DW$50        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A20")
     342                            .dwattr $C$DW$50, DW_AT_location[DW_OP_regx 0x29]
     343                    $C$DW$51        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A21")
     344                            .dwattr $C$DW$51, DW_AT_location[DW_OP_regx 0x2a]
     345                    $C$DW$52        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A22")
     346                            .dwattr $C$DW$52, DW_AT_location[DW_OP_regx 0x2b]
     347                    $C$DW$53        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A23")
     348                            .dwattr $C$DW$53, DW_AT_location[DW_OP_regx 0x2c]
     349                    $C$DW$54        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A24")
     350                            .dwattr $C$DW$54, DW_AT_location[DW_OP_regx 0x2d]
     351                    $C$DW$55        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A25")
     352                            .dwattr $C$DW$55, DW_AT_location[DW_OP_regx 0x2e]
     353                    $C$DW$56        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A26")
     354                            .dwattr $C$DW$56, DW_AT_location[DW_OP_regx 0x2f]
     355                    $C$DW$57        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A27")
     356                            .dwattr $C$DW$57, DW_AT_location[DW_OP_regx 0x30]
     357                    $C$DW$58        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A28")
     358                            .dwattr $C$DW$58, DW_AT_location[DW_OP_regx 0x31]
     359                    $C$DW$59        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A29")
     360                            .dwattr $C$DW$59, DW_AT_location[DW_OP_regx 0x32]
     361                    $C$DW$60        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A30")
     362                            .dwattr $C$DW$60, DW_AT_location[DW_OP_regx 0x33]
     363                    $C$DW$61        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("A31")
     364                            .dwattr $C$DW$61, DW_AT_location[DW_OP_regx 0x34]
     365                    $C$DW$62        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B16")
     366                            .dwattr $C$DW$62, DW_AT_location[DW_OP_regx 0x35]
     367                    $C$DW$63        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B17")
     368                            .dwattr $C$DW$63, DW_AT_location[DW_OP_regx 0x36]
     369                    $C$DW$64        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B18")
     370                            .dwattr $C$DW$64, DW_AT_location[DW_OP_regx 0x37]
     371                    $C$DW$65        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B19")
     372                            .dwattr $C$DW$65, DW_AT_location[DW_OP_regx 0x38]
     373                    $C$DW$66        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B20")
     374                            .dwattr $C$DW$66, DW_AT_location[DW_OP_regx 0x39]
     375                    $C$DW$67        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B21")
     376                            .dwattr $C$DW$67, DW_AT_location[DW_OP_regx 0x3a]
     377                    $C$DW$68        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B22")
     378                            .dwattr $C$DW$68, DW_AT_location[DW_OP_regx 0x3b]
     379                    $C$DW$69        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B23")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    8

     380                            .dwattr $C$DW$69, DW_AT_location[DW_OP_regx 0x3c]
     381                    $C$DW$70        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B24")
     382                            .dwattr $C$DW$70, DW_AT_location[DW_OP_regx 0x3d]
     383                    $C$DW$71        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B25")
     384                            .dwattr $C$DW$71, DW_AT_location[DW_OP_regx 0x3e]
     385                    $C$DW$72        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B26")
     386                            .dwattr $C$DW$72, DW_AT_location[DW_OP_regx 0x3f]
     387                    $C$DW$73        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B27")
     388                            .dwattr $C$DW$73, DW_AT_location[DW_OP_regx 0x40]
     389                    $C$DW$74        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B28")
     390                            .dwattr $C$DW$74, DW_AT_location[DW_OP_regx 0x41]
     391                    $C$DW$75        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B29")
     392                            .dwattr $C$DW$75, DW_AT_location[DW_OP_regx 0x42]
     393                    $C$DW$76        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B30")
     394                            .dwattr $C$DW$76, DW_AT_location[DW_OP_regx 0x43]
     395                    $C$DW$77        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("B31")
     396                            .dwattr $C$DW$77, DW_AT_location[DW_OP_regx 0x44]
     397                    $C$DW$78        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("AMR")
     398                            .dwattr $C$DW$78, DW_AT_location[DW_OP_regx 0x45]
     399                    $C$DW$79        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("CSR")
     400                            .dwattr $C$DW$79, DW_AT_location[DW_OP_regx 0x46]
     401                    $C$DW$80        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ISR")
     402                            .dwattr $C$DW$80, DW_AT_location[DW_OP_regx 0x47]
     403                    $C$DW$81        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ICR")
     404                            .dwattr $C$DW$81, DW_AT_location[DW_OP_regx 0x48]
     405                    $C$DW$82        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IER")
     406                            .dwattr $C$DW$82, DW_AT_location[DW_OP_regx 0x49]
     407                    $C$DW$83        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ISTP")
     408                            .dwattr $C$DW$83, DW_AT_location[DW_OP_regx 0x4a]
     409                    $C$DW$84        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IN")
     410                            .dwattr $C$DW$84, DW_AT_location[DW_OP_regx 0x4b]
     411                    $C$DW$85        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("OUT")
     412                            .dwattr $C$DW$85, DW_AT_location[DW_OP_regx 0x4c]
     413                    $C$DW$86        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ACR")
     414                            .dwattr $C$DW$86, DW_AT_location[DW_OP_regx 0x4d]
     415                    $C$DW$87        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ADR")
     416                            .dwattr $C$DW$87, DW_AT_location[DW_OP_regx 0x4e]
     417                    $C$DW$88        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FADCR")
     418                            .dwattr $C$DW$88, DW_AT_location[DW_OP_regx 0x4f]
     419                    $C$DW$89        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FAUCR")
     420                            .dwattr $C$DW$89, DW_AT_location[DW_OP_regx 0x50]
     421                    $C$DW$90        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("FMCR")
     422                            .dwattr $C$DW$90, DW_AT_location[DW_OP_regx 0x51]
     423                    $C$DW$91        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("GFPGFR")
     424                            .dwattr $C$DW$91, DW_AT_location[DW_OP_regx 0x52]
     425                    $C$DW$92        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DIER")
     426                            .dwattr $C$DW$92, DW_AT_location[DW_OP_regx 0x53]
     427                    $C$DW$93        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("REP")
     428                            .dwattr $C$DW$93, DW_AT_location[DW_OP_regx 0x54]
     429                    $C$DW$94        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TSCL")
     430                            .dwattr $C$DW$94, DW_AT_location[DW_OP_regx 0x55]
     431                    $C$DW$95        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TSCH")
     432                            .dwattr $C$DW$95, DW_AT_location[DW_OP_regx 0x56]
     433                    $C$DW$96        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ARP")
     434                            .dwattr $C$DW$96, DW_AT_location[DW_OP_regx 0x57]
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE    9

     435                    $C$DW$97        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ILC")
     436                            .dwattr $C$DW$97, DW_AT_location[DW_OP_regx 0x58]
     437                    $C$DW$98        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RILC")
     438                            .dwattr $C$DW$98, DW_AT_location[DW_OP_regx 0x59]
     439                    $C$DW$99        .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DNUM")
     440                            .dwattr $C$DW$99, DW_AT_location[DW_OP_regx 0x5a]
     441                    $C$DW$100       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("SSR")
     442                            .dwattr $C$DW$100, DW_AT_location[DW_OP_regx 0x5b]
     443                    $C$DW$101       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("GPLYA")
     444                            .dwattr $C$DW$101, DW_AT_location[DW_OP_regx 0x5c]
     445                    $C$DW$102       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("GPLYB")
     446                            .dwattr $C$DW$102, DW_AT_location[DW_OP_regx 0x5d]
     447                    $C$DW$103       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TSR")
     448                            .dwattr $C$DW$103, DW_AT_location[DW_OP_regx 0x5e]
     449                    $C$DW$104       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ITSR")
     450                            .dwattr $C$DW$104, DW_AT_location[DW_OP_regx 0x5f]
     451                    $C$DW$105       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("NTSR")
     452                            .dwattr $C$DW$105, DW_AT_location[DW_OP_regx 0x60]
     453                    $C$DW$106       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("EFR")
     454                            .dwattr $C$DW$106, DW_AT_location[DW_OP_regx 0x61]
     455                    $C$DW$107       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ECR")
     456                            .dwattr $C$DW$107, DW_AT_location[DW_OP_regx 0x62]
     457                    $C$DW$108       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("IERR")
     458                            .dwattr $C$DW$108, DW_AT_location[DW_OP_regx 0x63]
     459                    $C$DW$109       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DMSG")
     460                            .dwattr $C$DW$109, DW_AT_location[DW_OP_regx 0x64]
     461                    $C$DW$110       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("CMSG")
     462                            .dwattr $C$DW$110, DW_AT_location[DW_OP_regx 0x65]
     463                    $C$DW$111       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DT_DMA_ADDR")
     464                            .dwattr $C$DW$111, DW_AT_location[DW_OP_regx 0x66]
     465                    $C$DW$112       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DT_DMA_DATA")
     466                            .dwattr $C$DW$112, DW_AT_location[DW_OP_regx 0x67]
     467                    $C$DW$113       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DT_DMA_CNTL")
     468                            .dwattr $C$DW$113, DW_AT_location[DW_OP_regx 0x68]
     469                    $C$DW$114       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TCU_CNTL")
     470                            .dwattr $C$DW$114, DW_AT_location[DW_OP_regx 0x69]
     471                    $C$DW$115       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_REC_CNTL")
     472                            .dwattr $C$DW$115, DW_AT_location[DW_OP_regx 0x6a]
     473                    $C$DW$116       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_XMT_CNTL")
     474                            .dwattr $C$DW$116, DW_AT_location[DW_OP_regx 0x6b]
     475                    $C$DW$117       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_CFG")
     476                            .dwattr $C$DW$117, DW_AT_location[DW_OP_regx 0x6c]
     477                    $C$DW$118       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_RDATA")
     478                            .dwattr $C$DW$118, DW_AT_location[DW_OP_regx 0x6d]
     479                    $C$DW$119       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_WDATA")
     480                            .dwattr $C$DW$119, DW_AT_location[DW_OP_regx 0x6e]
     481                    $C$DW$120       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_RADDR")
     482                            .dwattr $C$DW$120, DW_AT_location[DW_OP_regx 0x6f]
     483                    $C$DW$121       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("RTDX_WADDR")
     484                            .dwattr $C$DW$121, DW_AT_location[DW_OP_regx 0x70]
     485                    $C$DW$122       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("MFREG0")
     486                            .dwattr $C$DW$122, DW_AT_location[DW_OP_regx 0x71]
     487                    $C$DW$123       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DBG_STAT")
     488                            .dwattr $C$DW$123, DW_AT_location[DW_OP_regx 0x72]
     489                    $C$DW$124       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("BRK_EN")
TMS320C6x Assembler PC v7.3.4 Wed Oct 10 12:35:52 2012

Tools Copyright (c) 1996-2012 Texas Instruments Incorporated
crap.asm                                                             PAGE   10

     490                            .dwattr $C$DW$124, DW_AT_location[DW_OP_regx 0x73]
     491                    $C$DW$125       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP0_CNT")
     492                            .dwattr $C$DW$125, DW_AT_location[DW_OP_regx 0x74]
     493                    $C$DW$126       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP0")
     494                            .dwattr $C$DW$126, DW_AT_location[DW_OP_regx 0x75]
     495                    $C$DW$127       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP1")
     496                            .dwattr $C$DW$127, DW_AT_location[DW_OP_regx 0x76]
     497                    $C$DW$128       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP2")
     498                            .dwattr $C$DW$128, DW_AT_location[DW_OP_regx 0x77]
     499                    $C$DW$129       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("HWBP3")
     500                            .dwattr $C$DW$129, DW_AT_location[DW_OP_regx 0x78]
     501                    $C$DW$130       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("OVERLAY")
     502                            .dwattr $C$DW$130, DW_AT_location[DW_OP_regx 0x79]
     503                    $C$DW$131       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("PC_PROF")
     504                            .dwattr $C$DW$131, DW_AT_location[DW_OP_regx 0x7a]
     505                    $C$DW$132       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("ATSR")
     506                            .dwattr $C$DW$132, DW_AT_location[DW_OP_regx 0x7b]
     507                    $C$DW$133       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TRR")
     508                            .dwattr $C$DW$133, DW_AT_location[DW_OP_regx 0x7c]
     509                    $C$DW$134       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("TCRR")
     510                            .dwattr $C$DW$134, DW_AT_location[DW_OP_regx 0x7d]
     511                    $C$DW$135       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DESR")
     512                            .dwattr $C$DW$135, DW_AT_location[DW_OP_regx 0x7e]
     513                    $C$DW$136       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("DETR")
     514                            .dwattr $C$DW$136, DW_AT_location[DW_OP_regx 0x7f]
     515                    $C$DW$137       .dwtag  DW_TAG_TI_assign_register, DW_AT_name("CIE_RETA")
     516                            .dwattr $C$DW$137, DW_AT_location[DW_OP_regx 0xe4]
     517                            .dwendtag $C$DW$CU
     518                    

No Assembly Errors, No Assembly Warnings

5025.crap-O2-out.txt
[C674X_0] 100 aec3

  • You didn't provide the C code, but I was able to piece it together from the listing file.  Here is a self-testing test case:

    #include <stdio.h>
    #include <stdint.h>
    #include <assert.h>
    
    void cutdown(uint32_t arg)
    {
        uint64_t acc;
        acc  = 1ull << 28;
        acc *= arg;
        acc /= 24000;
        printf("%d %x\n", arg, (uint32_t)acc);
        assert(acc == 0x111111);
    }
    
    void main(void)
    {
        cutdown(100);
    }

    This is now SDSCM00045562.

  • Here's the original source but you reconstruction is the same.

    1651.crap.c
    #include <stdio.h>
    #include "crap.h"
    
    #define DSP_CLKIN_KHZ 24000
    #define FREQ_BIT_RESOLUTION 0x10000000 /* 2^28 */
    
    void crap(uint32_t ulFreqKHz_)
    {
      uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ulFreqKHz_;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%d %x\n", ulFreqKHz_, ulFreqReg);
    }
    

  • A workaround is to define "arg" as uint64_t instead of uint32_t.  There's a particular place in the compiler that used "arg"'s type when it should have used the type of the multiply.

    (If you change the type, you'll also have to change the printf call to use %lld, because %d doesn't match uint64_t and the output will look wrong, though the assertion will demonstrate that it's correct.)

  • The work-around of promoting the incoming argument to uint64_t does work. Not something that I would consider to be a solution. Casting all the operands to 64-bit doesn't work. Yet using an intermediate 64 bit variable does. Making the 64 bit accumulator volatile also works by disabling the optimization.

    I'd still like to know the exact scenario where this error occurs. All 64-bit operations are suspect.

    #include <stdio.h>
    #include <stdint.h>

    #include "problem.h"

    #define DSP_CLKIN_KHZ 24000ULL
    #define FREQ_BIT_RESOLUTION 0x10000000ULL /* 2^28 */

    static void problem0(uint32_t ulFreqKHz_)
    {
      uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ulFreqKHz_;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%s(%d) %x\n", __FUNCTION__, (int)ulFreqKHz_, ulFreqReg);
    }

    static void problem1(uint64_t ulFreqKHz_)
    {
      uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ulFreqKHz_;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%s(%d) %x\n", __FUNCTION__, (int)ulFreqKHz_, ulFreqReg);
    }

    static void problem2(uint32_t ulFreqKHz_)
    {
      uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= (uint64_t)ulFreqKHz_;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%s(%d) %x\n", __FUNCTION__, (int)ulFreqKHz_, ulFreqReg);
    }

    static void problem3(uint32_t ulFreqKHz_)
    {
      volatile uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ulFreqKHz_;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%s(%d) %x\n", __FUNCTION__, (int)ulFreqKHz_, ulFreqReg);
    }
    #pragma FUNCTION_OPTIONS ( problem4, "-O1" );
    static void problem4(uint32_t ulFreqKHz_)
    {
      volatile uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ulFreqKHz_;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%s(%d) %x\n", __FUNCTION__, (int)ulFreqKHz_, ulFreqReg);
    }

    static void problem5(uint32_t ulFreqKHz_)
    {
      uint64_t ullFreqKHz = ulFreqKHz_;
      uint64_t ullFreqReg;
      uint32_t ulFreqReg;
      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ullFreqKHz;
      ullFreqReg /= DSP_CLKIN_KHZ;
      ulFreqReg   = (uint32_t)ullFreqReg;
      printf("%s(%d) %x\n", __FUNCTION__, (int)ulFreqKHz_, ulFreqReg);
    }
    /*
    [C674X_0] problem0(100) aec3
    [C674X_0] problem1(100) 111111
    [C674X_0] problem2(100) aec3
    [C674X_0] problem3(100) 111111
    [C674X_0] problem4(100) 111111
    [C674X_0] problem5(100) 111111
    */
    void problem(void)
    {
      uint32_t ulFreqKHz_ = 100;
      problem0(ulFreqKHz_);
      problem1(ulFreqKHz_);
      problem2(ulFreqKHz_);
      problem3(ulFreqKHz_);
      problem4(ulFreqKHz_);
      problem5(ulFreqKHz_);
    }

  • Norman Wong said:

    I'd still like to know the exact scenario where this error occurs. 

    The expression with the problem is A * K, where K is a known integer power of two with a type that is wider than int, and A is a variable (or possibly an expression) whose type is narrower than K's.

    Several different source expressions can evolve into such an A*K.  Using *= will do it, obviously.  Your K is an explicit 1<<28, but constant propagation could also create one.  A<<S can also be rendered internally as A*K.

    The type of A is being used at a point where the combined type of A and K should be;  given C's promotion rules, I believe that's only significant when K's type is wider than int and wider than A's.  I haven't explored your problem2() case so I don't know exactly what I'm doing, but it's likely that a different part of the compiler removes the widening cast because it's redundant, reducing it to the original case.

  • I'm not sure the 1<<28 constant is involved. I do see that it's large enough that when multiplied, creates a value larger than 32 bits. The value of incoming parameter is should not be known at compile time. It's 100 and not a power of 2. Most of the work-arounds involve forcibly promoting a 32-bit variable to a 64 bit variable. Seems that the 64x32 bit multiply incorrectly results in a 32 bit answer.

    Correct calculation
    a  = 0x10000000
    b  = a * 0x64
       = 0x10000000 * 0x64
       = 0x640000000
    c  = b / 0x5DC0
       = 0x640000000 / 0x5DC0
       = 0x111111
    d  = (uint32_t)c
       = 0x111111

    Incorrect calculation
    a  = 0x10000000
    b  = a * 0x64
       = 0x10000000 * 0x64 <- this should be a 64x64=64 bit multiply.
       = 0x40000000 <- incorrectly truncated to 32 bits or incorrect 32=32x32 multiply
    c  = b / 0x5DC0
       = 0x40000000 / 0x5DC0
       = 0xAEC3
    d  = (uint32_t)c
       = 0xAEC3

    I think the upper register of the 64 bit register pair is being dropped before calling the divide. I am guessing that failure sequence would be something like this:

    ullX *= ulY; /* Where result would be greater than 32 bits. */
    ullX /= ulZ; /* Dividend is truncated to 32 bit before division */

    I've applied the -O1 work-around to several places that I've used 64-bit math. Enough to proceed with. Thanks.

  • Norman Wong said:

    I'm not sure the 1<<28 constant is involved.

    No, really, it is;  I'm looking at that part of the compiler right now.

    There's a transformation from A*k to A<<(log2(k)).  The multiply is 64-bit because the combined type of the two operands is 64-bit.  The shift should also use the combined type and also be 64-bit, but erroneously uses the type of A and thus is 32-bit.

    100 * (1<<28) and 100<<28 are both 0x640000000.  A 32-bit shift produces 0x40000000.  0x640000000/24000 is 0x111111, 0x40000000/24000 is 0xaec3.

    You can see it in the .asm file if you use "--optimizer_interlist --keep_asm" (or "-os -k" for short).  The offending line is rendered in an optimiser comment as

      C$1 = (unsigned long long)(arg<<28)/24000uLL;

    which is a 32-bit shift (because arg is 32-bit), cast to 64-bit, then divided. The instructions show a single SHL.

    The correct version will be rendered as

      C$1 = ((unsigned long long)arg<<28)/24000uLL;

    which casts "arg" to 64 bits for a 64-bit shift before the division.  The instructions have an SHL and SHRU to construct the 64-bit result.

    And of course the transformation to a shift doesn't make sense unless the multiplicand is a power of two, which 1<<28 is.

  • Okay...I think I sort of understand. The compiler first reordered my operations from this

      ullFreqReg  = FREQ_BIT_RESOLUTION;
      ullFreqReg *= ulFreqKHz_;

    to this

      ullFreqReg  = ulFreqKHz_;
      ullFreqReg *= FREQ_BIT_RESOLUTION;

    Then knowing FREQ_BIT_RESOLUTION is a power of 2, the compiler replaces the multiply with a shift.

      ullFreqReg   = ulFreqKHz_;
      ullFreqReg <<= log2(FREQ_BIT_RESOLUTION);

    and the shift is incorrectly done as a 32-bit shift.

    Fascinating stuff. Odd that -O1 is okay by -O2 is not as both do the replace muitply with shift. Just that -O2 drops the second shift?

    Don't quite have to time to do a line by line analysis of all my 64-bit math though. Quick blanket fix of -O1 for functions with 64-bit operations will do for now.