Orange C 5.40.1 is released

This release is primarily to add some speed optimizations. The major optimization is aggressive inlining.

This release also fixes some bugs with inlining: probably the most import is returning int32 values from int64 functions was broken

In recent version 5.39.1, the name mangling for C++ has changed, and the object library file format has changed. Please completely rebuild your projects.

Some of the changes are as follows

  • occ: multiplies were not being converted to shifts for powers of two
  • occ: optimize a sequence of store to memory followed by load from same memory
  • occ: perform aggressive inlining as a speed optimization
  • occ: fix problems where backend constant folding did not always fold constants
  • occ: fix problems with taking the address of an inlined function the function was not instantiated
  • occ: fix problems with prototyping an inline function after it has a body the code generation would be incorrect
  • occ: fix problems with not adding extensions when the file name had extra '.' characters the compiler would use incorrect file names and become confused
  • occ: fix bug in divide signed value by power of two (could result in the wrong answer)
  • occ: fix bug where complicated critical sections that had been removed as dead code were later processed again
  • occ: returning 0 from a function returning long long was broken
  • occ: don't allow inlining of functions with variadic parameter lists
  • oasm: fix problem with fixed up values not being displayed correctly in the listing file