Keil Logo

What's New in C166 Version 7.57

  • [A166 Macro Assembler]
    • Corrected: sometimes broken object files if multiple A166 run at the same time.
    • Corrected: two line feeds in Macro Processor Language (MPL) error message.
  • [C166 C Compiler]
    • Corrected: compiler crash with intrinsic _lror_() in combination with a modular operation. Example:
      #include <intrins.h>
      
      unsigned long ROR32(unsigned long v, int n)
      {
        n = n%32;
        return _lror_(v,n);
      }
      
    • Corrected: under some circumstances the C166 generates erroneously long and indirect addressing modes togehter with the EXTS instruction which overrides accesses to data in other pages.
    • Corrected: a user stackpointer corruption which occurs when the struct-parameter of a function gets initialized by the return struct-value of another funcion call. Example:
      -------------------------------------------------------------
                           Source code
      -------------------------------------------------------------
      
      08     :::::::
      09     typedef struct
      10     {
      11       DWORD dwTest1;
      12       DWORD dwTest2;
      13     }tStruct;
      14
      15     static void test (void);
      16     static tStruct test_1 (DWORD dw1, DWORD dw2);
      17     static tStruct test_2 (tStruct tVal1, WORD wVal2);
      18
      19     static void test (void)
      20     {
      21       tStruct tVar1;
      22       /* The first parameter of function test_2 gets initialized by the return value of the function test_1 */
      23       tVar1 = test_2(test_1(0x1000, 0x2000), 0xfff);
      24     }
      25     :::::::
      
      
      -----------------------------------------------------------------           -------------------------------------------------------------
                           Wrong code generation                                                    Corrected code generation
      -----------------------------------------------------------------           -------------------------------------------------------------
      
                    The user stackpointer R0 gets corrupted  ---------+
                                                                      |
                                                 ; SOURCE LINE # 23   |                                                      ; SOURCE LINE # 23
      0004 E6F4FF0F      MOV       R4,#0FFFH                          |           0004 E6F4FF0F      MOV       R4,#0FFFH
      0008 8840          MOV       [-R0],R4                           |           0008 8840          MOV       [-R0],R4
      000A E6FA0020      MOV       R10,#02000H                        |           000A E6FA0020      MOV       R10,#02000H
      000E E00B          MOV       R11,#00H                           |           000E E00B          MOV       R11,#00H
      0010 E6F80010      MOV       R8,#01000H                         |           0010 E6F80010      MOV       R8,#01000H
      0014 E009          MOV       R9,#00H                            |           0014 E009          MOV       R9,#00H
      0016 DA000000 R    CALLS     SEG (test_1),test_1                |           0016 DA000000 R    CALLS     SEG (test_1),test_1
      001A E087          MOV       R7,#08H                            |           001A E087          MOV       R7,#08H
      001C 2007          SUB       R0,R7                              |           001C 2007          SUB       R0,R7
      001E F060          MOV       R6,R0                              |           001E F060          MOV       R6,R0
      0020 0061          ADD       R6,R1                              |           0020 0061          ADD       R6,R1
      0022 DA000000 E    CALLS     SEG (?C_WCPYSH),?C_WCPYSH          |           0022 DA000000 E    CALLS     SEG (?C_WCPYSH),?C_WCPYSH
      0026 0001          ADD       R0,R1                    <---------+           0026 DA000000 R    CALLS     SEG (test_2),test_2
      0028 DA000000 R    CALLS     SEG (test_2),test_2                            002A E0A6          MOV       R6,#0AH       ; tVar1
      002C E0A6          MOV       R6,#0AH       ; tVar1                          002C 0060          ADD       R6,R0         ; tVar1
      002E 0060          ADD       R6,R0         ; tVar1                          002E 0061          ADD       R6,R1
      0030 0061          ADD       R6,R1                                          0030 E087          MOV       R7,#08H
      0032 E087          MOV       R7,#08H                                        0032 DA000000 E    CALLS     SEG (?C_WCPYNH),?C_WCPYNH
      0034 DA000000 E    CALLS     SEG (?C_WCPYNH),?C_WCPYNH                      0036 0001          ADD       R0,R1
      0038 0001          ADD       R0,R1                                          0038 06F00A00      ADD       R0,#0AH
      003A 06F00A00      ADD       R0,#0AH                                                                                   ; SOURCE LINE # 24
                                                 ; SOURCE LINE # 24
      
  • [Debug Commands]
  • [µVision]
    • This C166 release comes with µVision V5.25.3.
    • Enhanced: New PC-Lint configuration option to add project target and compiler specific preprocessor symbols.
  • [Supported Operating Systems]
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.