C166 Version 7.57 Release

  • [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.2.
    • Enhanced: New PC-Lint configuration option to add project target and compiler specific preprocessor symbols.
  • [Supported Operating Systems]
2018-05-22T17:55:11+00:00