Revision: 1555
Author: robhamerling
Date: Sun Dec 27 05:39:45 2009
Log: Removing obsolete compiler material


http://code.google.com/p/jallib/source/detail?r=1555

Deleted:
  /trunk/compiler/README.txt

=======================================
--- /trunk/compiler/README.txt  Fri Aug  7 12:47:25 2009
+++ /dev/null
@@ -1,836 +0,0 @@
-JalV2 readme
-============
-
-Please see jaldiff.txt for important information about differences.
-
-Included in this archive:
-
-README.txt  : this file
-jaldiff.txt : differences between jal and JalV2
-jalv2       : the linux binary. requires libc.so.6
-jalv2.exe   : win32 binary (no debugging, optimization on)
-jalv2d.exe  : win32 binary with debugging enabled
-chipdef/*   : chip definition files
-
-Makefiles and executable for eComStation (OS/2) are available at
-http://www.robh.nl/picsoft.php#jalv2
-
-Note this package contains only the compiler. For a comprehensive set
-of JalV2 libraries see the Jallib collection at:
-
-http://jallib.google.code
-
-or Bert van Dam's JAL Startpack:
-
-http://home.hetnet.nl/~annie86/bvd/lonelynights/index.html
-
-
-History
-=======
-2.4l  --  7 Aug 2009
-         * -const-detect ordered the constant big endian instead
-           if little endian
-         * 16 bit code generation fixed to match mpasm (namely,
-           the PC is shown in bytes not words)
-         * Added inline assembly: reset
-         * A procedure taking a volatile parameter and also
-           re-entrant would cause an assert()
-         * Changed re-rentrant entry/exit to *not* use stkpush/pop
-         * A re-entrant *function's* return value was over-written
-           if there were any non-volatile OUT paramters
-         * added a numeric option to -loader18 to set the offset
-           Examples:
-             -loader18      : starts the code at 2048
-             -loader18 4096 : starts the code a 4096
-         * Added units to jalpragm.txt to explain that for
-           `PRAGMA CODE size', size is in WORDs for 12/14 bit
-           cores, and BYTEs for 16 bit cores (thanks MicroChip!).
-           This follows from the second bullet above.
-         * Included inclue assembly opcodes: rlcf/rlncf/rrcf/rrncf
-         * Fixed 16-bit code to use rrcf instead of rrf
-         * Make sure variables don't span banks even if the banks
-           are contiguous (a problem seen on 16 bit cores).
-         * `ALIAS...IS' should work even if the underlying variable
-           is only a pseudo-variable
-         * Output of `Code area' was screwy on 16 bit cores
-         * Changed `pragma code' on the 18 series to use bytes instead
-           of words
-
-2.4k  -- 08 May 2009
-         * very minor optimization for bit value return
-         * B00059: compiler generated 'put for bits doesn't work
-         * B00058: compiler generated 'put doesn't work
-         * B00057: cannot pass volatile bit out parameter
-         * fixed jalpragm.txt to match the code
-         * B00060: cannot assign to a multi-bit on 16 bit cores
-         * cleaned up signed/unsigned and truncation warnings
-         * B00061: 16 bit cores should save TBLPTR/TABLAT on ISR
-         * B00039: FSR should be saved if used in an ISR
-         * B00063: IF cond THEN...generates bad code in some cases
-         * databits aren't set correctly on indirectly called functions
-         * if an indirect function used no data space *and* called other
-           functions that *did* use data space, the space for those data
-           would not be correctly allocated.
-
-2.4j  -- 12 Mar 2009
-         * B00052: Allow any characters in an include filename except
-           ';' and '--'. Also, the filename may neither begin
-           nor end with a space.
-         * B00053: Added _warn, _error, and _debug (Thanks Sebastien!)
-         * B00054: Fixed `pragma error' to display any text on the line  
after
-           the pragma
-         * B00050: If `-loader18' was used, the code wouldn't skip over
-           any preamble.
-         * B00051: `const blah = 0x400; var word x at blah' failed  
miserably
-         * passing an array element into an inline procedure failed
-           (always only passed the first element of the array)
-         * B00056: added 'tblrd' and 'tblwr' to inline assembly
-         * fixed comparing signed constants
-         * in some instances assigning a negative number to a signed  
variable
-           that can clearly contain it resulted in signed/unsigned mismatch
-         * Removed OS/2 Makefiles
-         * Issue warning when multi-byte string is used in an expression
-           (x = "abc" * 2 --> only 'a' is used)
-         * *Always* set the 2nd high bit when passing constant arrays
-
-2.4i  -- 01 Dec 2008
-         * Adding suffix to displayed version (2.4i)
-         * Inline function return wasn't being handled correctly
-         * Inline function parameters that are not used directly
-           (only used via another variable placed `at' the parameter)
-           weren't working correctly.
-         * Compiler directives (``if cexpr...'') incorrectly opened
-           a new block
-         * Passing an array element into an inlined function
-           doesn't work (drops the array index)
-         * Occasionally the compiler would spit out a bunch
-           of nuisance messages due to some orphaned list elements
-         * Fixed documentation (target_clock, not _target_clock)
-
-2.4h  -- 15 Sept 2008
-         * fixed all warnings with '-W -Wall'
-         * added makefiles from Rob
-         * added `pragma speed' and `pragma size'
-         * fixed `movlb' generation
-         * fixed HEX generation on 16 bit cores
-         * allow TRIS 5 - 9 (formerly was 5 - 7)
-         * introduced pragma nostack
-         * return zero on success, system dependent non-zero on failure
-         * minimize the amount of pic_state saved in an interrupt
-         * changed to new makefile
-
-2.4g  -- ?? June 2008
-         * using `AT cexpr' instead of `AT var' doesn't work
-           with function parameters
-
-2.4f  --  (unreleased)
-         * B00042 : Inline assembly using conditional operations might get
-                    optimized away
-         * B00041 : inlining a function or procedure that takes a
-                    volatile parameter results in `invalid operation'
-
-2.4e  -- 22 May 2008
-         * B00040 : x - C, where x is 2-bytes doesn't work if the LSB of C
-                    is 0, and C >= x
-
-2.4d  --  5 May 2008
-         * B00036 : Inline parameters that are specifically located
-                    are incorrectly replaced with locals.
-         * B00037 : Division fails due to invalid assumptions about
-                    subtraction (gordon)
-         * B00038 : multi-bit assignment is not shifting the result
-                    into the correct bits
-
-2.4c  --  4 April 2008
-         * optimized `x + -1' and `x - -1'
-         * crash: x = x - x
-         * optimized `y = x + x' --> y = x << 1
-         * optimized 12/14 bit addition and subtraction
-         * optimized shifts
-         * optimized decrement
-         * fixed 16 bit lookup table generation (thanks diego)
-         * added jalpragm.txt to the distribution
-         * B00035: compiler crashes with lookup tables on 16 bit cores
-
-2.4b  -- 17 March 2008
-         * B00028: "opt pass has gone infinite"
-         * B00029: `forever loop end loop' hangs compiler
-         * B00031: inline assembly might incorrectly use bank
-                   and page operators on 16 bit cores
-         * B00032: `exit loop' request for all loop types
-         * B00033: `repeat...until' construct
-
-2.4a  --  6 March 2008
-         * B00027 -- wrong registers used when receiving the result
-                     of a function in an inlined function (gordon)
-         * B00026 -- Loop optimization bug with nested IFs (wouter)
-         * B00024 -- Compiler is re-using state variables that are in
-                     use in some cases (joep)
-         * Minor FOR loop optimization -- if we know the loop will
-           be executed at least once (controlling expression is
-           constant > 0), no need to initially jump over the body.
-2.4   -- 23 January 2008
-         * initial 16 bit support
-         * added '-loader18' to support bootloaders on the 16 bit cores
-         * fixed B00022 (multiple files on the command line crash the  
compiler)
-         * fixed B00015 (temporary used in FOR loops overwritten)
-         * comments on `CASE...OF...'' lines now show in resulting .asm  
file
-         * ORG is twice what is should be on the 12/14 bit cores
-           (Thanks Gordon)
-         * Only 1/2 of each _fuse is put into the HEX file
-           (Thanks Bert)
-         * Fixed infinite recursion in the BSR analyzer (Thanks Gordon)
-         * Fixed c18c* chipdef files, and added some 18f* ones.
-         * Variables used in an interrupt procedure were allocated twice
-         * Volatile variables used in an interrupt procedure were allocated
-           multiple times.
-         * Incorrect config bits in the HEX file for the 18 series
-         * fixed B00023 (aliased variables in inline functions don't work)
-         * fixed B00021 (cannot alias pseudo-variables)
-
-2.2.4 -- 23 June 2007
-         * fixed -bloader (thanks N.Muto)
-         * fixed flexible strings (thanks N.Muto)
-         * fixed spurious `requires boolean expression' (thanks Bert)
-         * fixed multi-byte decrement
-         * fixed const shift right (ex, 5 >> x) and shift right
-           arithmetic
-         * added `use ./jalv2 --help' for help if the compiler
-           is run without any source file (thanks Sunish)
-         * added "/help" "/h" and "/?" as aliases for --help
-
-2.2.3 -- 20 June 2007
-         * flexible array support
-           Flexible arrays are a special array format when passing
-           parameters to a procedure or function, defined as follows:
-
-             PROCEDURE test_proc(BYTE IN str[]) IS
-               ...blah...
-             END PROCEDURE
-
-           Now, str is used just like any other array (the COUNT()
-           operator still works). The difference is arrays of any
-           length can be passed in, for example:
-
-           BYTE       str1[] = "this is a test"
-           CONST BYTE str2[] = "another test"
-
-           test_proc(str1)
-           test_proc(str2)
-
-           One caveat here is since the array is passed by reference,
-           not value, any modifications to the array will show up.
-           If a CONST is passed into a procedure that modifies the
-           array, an error will be generated, but unfortunately will
-           be non-obvious.
-
-         * fixed software stack generation
-         * fixed variable allocator bug (which made the amount of
-           data used jump substantially in some situations).
-         * changed variable names to avoid collisions
-         * removed 'addlw' and 'sublw' (for 12 bit support)
-         * added a new compiler flag: '-include {name}' which is
-           an implicit `include name' before parsing the program
-         * any source path to the file being compiled is included
-           as the first include path
-         * multiple include directives (and paths) allowed
-         * universal types now transformed to the type of the intializer
-         * optimized multi-bit assignment
-         * looped shift-right in some conditions instead of
-           generating a bunch of code
-         * warn if an IF or WHILE expression isn't boolean
-         * An unknown token in a include file now generates an error
-         * Constant expressions are now assigned the correct type
-           (instead of universal)
-         * Now generate '.COD' file for debugging information
-         * Include files for MPLAB integration
-
-2.2.2 -- 10 May 2007
-         * complete 12 & 14 bit support
-           nb: division on the 12 bit is sketchy due to memory requirements
-         * 12 bit emulator support
-         * chipdef/16f505.jal
-         * new pragmas *required* by all chips:
-           pragma target cpu pic_xxx
-             define the target cpu. pic_xxx already defined in chipdef.jal
-           pragma target bank xxx
-             define the target bank size (14 bit = 0x80, 12 bit = 0x20)
-           pragma target page xxx
-             define the target page size (14 bit = 0x0800, 12 bit = 0x0200)
-         * fixed bugs in:
-             arithmetic shift right
-             x && 1 -- code generation error
-             assign to bit
-
-2.2.1 --  7 May 2007
-         * A rare bug in the databit optimization code can cause the
-           compiler to crash due to infinite recursion
-         * Initial 12 bit support
-
-2.2   --  2 May 2007 -- bug fix release
-
-2.1.4 -- 25 April 2007
-         * fixed a rare variable allocation bug which would cause two
-           active variables to share the same memory location
-         * minor change in the assembly output to show the procedure
-           in which a variable is defined as part of the EQU
-         * fixed -no-variable-reuse
-
-2.1.3 -- 19 April 2007
-         * asm generation in two cases would set the destination
-           for movwf causing MPLAB to barf
-         * assign to bit broken if the offset is greater than 0
-         * better universal type support
-         * check for subscript out of range (when using constant  
subscripts)
-         * if the left side of a rotate right is signed, the operation
-           will be an arithmetic (sign preserving) shift
-         * smarter warnings about signed/unsigned and truncation when
-           dealing with universal types
-
-2.1.2 -- 31 March 2006
-         * IMPORTANT! Renamed _pic_add_accum to _pic_accum. This is
-           *required* for add and subtract and must either be placed
-           at the same offset in each bank or, preferably, in the shared
-           area!
-         * complete rewrite of the operator code including test generator
-         * added an (incomplete) emulator to assist in checking the  
operators
-           "-emu" : run the emulator. This will show each instruction as  
it's
-           run unless "-quiet" is also set.
-         * new instruction:
-             ASSERT expr
-           will stop the emulator if expr is not TRUE
-         * minor optimization when returning the value of a function
-         * adding preliminary casting
-             type [* sz] ( expr )
-         * added patches suggested by Mark Gross (64-bit clean,
-           fixes to the RICK_PIC code generator)
-
-2.1   -- 27 November 2006 fixes:
-         * variables were erroneously marked as either unused or unassigned
-           in certain circumstances causing the assignment to be silently
-           dropped
-         * In some circumstances a re-entrant call would not be setup
-           correctly (specifically, if an IN variable is not marked auto)
-         * empty parameter list not allowed in call (aka, `something'  
works,
-           whereas `something()' fails).
-         * added '-screamer' bootloader option
-
-2.0.7 -- 12 October 2006 fixes:
-         * Allow string in `pragma eedata' (pragma eedata "this is a test")
-         * new keyword : defined(), returns 1 if a label is defined, 0 if  
not
-           IF DEFINED(var) THEN ... END IF
-         * new constant : JAL_VERSION holds the version value
-           major * 1000 + minor (currently 2_001)
-         * assembly output of `movfw' was wrong (no negative effect other
-           than not being able to compile with MPLAB)
-
-2.0.6 -- 27 September 2006 fixes:
-         * long table preamble was wrong -- when incrementing pclath
-           on overflow, the result went into W instead of into pclath
-           causing only the first part of the table to print
-         * assembler blocks were completely ignored
-
-2.0.5 -- 25 September 2006 fixes:
-         * fixed the clear variable startup code
-         * added long lookup table support
-         * allow `var +/- x' in inline assembly
-         * allow a bunch of pre-defined macros in inline assembly
-           (see README.asm)
-         * allow 'db,' 'dw,' 'ds' in inline assembly
-         * new keyword : whereis (see the example in README.asm)
-         * all command line options that effect compilation can be
-           over-ridden with pragmas (pragmas take precedence)
-         * new pragma : pragma fast-interrupt
-           fast-interrupt will save & restore W, STATUS, and PCLATH
-           but nothing else. There are no restrictions, but logically
-           the interrupt procedure should be completely inline
-           assembly to prevent corruption of _pic_state
-         * hex in string didn't work (ex, "\xff"
-
-2.0.4 -- 16 August 2006 fixes:
-         * changed some branch optimizations
-         * fixed W load optimization for volatile variables
-         * changed const detection algorithm
-         * fixed CASE statement
-         * changed lookup table and pre-user order to guarantee lookup
-           tables don't span 256 byte boundaries & minimize the amount of
-           code not subject to optimization
-         * added compiler name & version, and CLI used to compile to the
-           top of the assembly file to aid debugging
-
-2.0.3  -- 4 August 2006 fixes:
-         * `a - C', with C a constant failed (became `a + C')
-         * added W load optimization (see -redundant-reduce)
-         * fixed lookup tables with multi-byte elements
-         * changed error if a call is made with too many or too few  
parameters
-
-2.0.2  -- 3 August 2006 fixes:
-         * LOOP construct changed -- instead of
-             while var < expr
-           use
-             while var != expr
-
-         * Added a warning if the control variable in a LOOP is changed
-         * functions returning BITs were broken
-         * don't generate code when function return values are ignored
-           (was assigning to a temporary)
-         * promotion from bit to byte wasn't handled correctly
-         * assigning from a single bit to an array didn't setup the array
-           correctly
-         * compiler crash if all space from the first bank was allocated
-         * negated universal constants weren't promoted correctly
-         * branchhi_[set|clr] were omitted on processors with 4K or less
-           code memory which broken the assembly file for delays
-         * changed delay code to guarantee the delay is *at least* the
-           amount requested (occasionally, it could be one cycle short)
-         * some work on changing the errors to be more useful
-         * rewrote the binary add code generator
-         * created `jalopts.txt' which explains the compiler options
-         * started new naming convention
-           major "." minor "." beta
-
-2.00  -- 31 July 2006 fixes:
-         * procedure calls wouldn't pass const parameters except in W
-         * data area definition in c16f877.jal and c16f876.jal were wrong
-           (missing 0x10 bytes in banks 2 & 3)
-         * off by one error in the variable allocation functions caused
-           one byte to always remain unallocated in the bank
-
-2.00  -- 29 July 2006 fixes:
-         * !0x80 wasn't properly promoted to 2 bytes
-         * minor bit optimization
-             x = x | 0x80  --> bsf x,7
-             x = x & !0x80 --> bcf x,7
-         * added compiler option '-const-detect' which enables an  
aggressive
-           constant detection optimizer in the compiler. This looks for
-           variables that are either only assigned once, or are always
-           assigned the same value and marks them const
-         * added compiler option '-temp-reduce' which enables the compiler  
to
-           optimize space used by temporary variables in complex  
expressions
-         * added "PRAGMA INLINE" which forces a procedure or function to be
-           inlined
-         * DWORD lookup tables were not being created correctly
-         * binary OR with a constant and src & dst unequal failed
-         * watcom C makefile changes courtesy of Mat Nieuwenhoven
-         * fixed PIC optimizer bug to not remove anything that follows a
-           conditional operator
-         * changed Makefiles so `make depend' would only include files  
local
-           to this project
-         * removed pjal references from README.txt (starting on 8 June '06)
-         * added a new construct:
-
-           BLOCK
-             statement(s)
-           END BLOCK
-
-           Any variables defined in the block are local to that block
-           (the flow control constructs: IF, FOR, WHILE, et.al.  already  
use
-           an implied block, this just allows for an explicit one). This
-           identical to BEGIN...END in PASCAL but follows more along the
-           lines of JAL syntax
-
-         * added a new flow control construct:
-
-           CASE expr OF
-             cexpr["," cexpr2...] ":" statement
-             ...
-             [OTHERWISE] statement
-           END CASE
-
-           Again, this is a JAL-ized version from PASCAL. Currently the  
code
-           generated is almost identical to using a bunch of
-           IF/ELSIF/ELSE/END IF statements but one day I might make it a
-           jump table.
-         * expanded pseudo variables to allow an index parameter (creating
-           virtual arrays)
-         * removed some bad `const's from the source courtesy of
-           Daniel Serpell
-         * cleaned up some compiler warnings
-
-2.00  --  8 June 2006 fixes:
-         * various chipdef file fixes (thanks Stef & Vasille)
-         * added _usec_delay
-
-2.00  -- 24 May 2006 fixes:
-         * removed implicit assumption that shifted values are always
-           a power of 2
-         * changes how out of range shifts worked. Previously, given a 32
-           bit value x, the result of:
-              x >> 35
-           was to set x to 0, whereas the result of:
-              x >> y (where y is 35)
-           resulted in:
-              x >> (y & 31)
-           This has been changed -- if a shift is out of range, the result
-           is x.
-         * minor Makefile corrections
-         * unused volatile variables were being allocated
-         * the not operator on single bit values failed if the two
-           values resided in different banks
-         * forced all volatile variables to be allocated first. this means
-           that volatile variables local to a procedure will be considered
-           static (the space won't be re-used by other variables, and  
recursive
-           functions will not get a separate copy).
-         * added '-clear' compiler option which clears all user data areas
-           on program entry (note: volatile, user-placed variables, and
-           unused data areas are not cleared).
-         * allow "\0" embedded in strings
-         * use C style string initialization, eg:
-             var byte string[] = "abc" "def" "ghi"
-           is the same as
-             var byte string[] = "abcdefghi"
-
-2.00  -- 15 May 2006 fixes:
-         * right shift multi-byte variable by a constant >= 8 failed
-         * right shift where the destination and second value are the
-           same failed
-         * variable places AT an element of an array will always go to
-           the zeroth element
-         * multi-byte signed constants weren't working correctly
-
-2.00  --  3 May 2006 fixes:
-         * fixed shift by non-constant 0
-         * fixed shift right from a larger value to a smaller
-         * multiple fuse words weren't being written to the HEX file
-         * bit temporaries would occasionally end up with the same name
-         * bit temporary variables might not be allocated
-
-2.00  -- 19 April 2006 fixes:
-         * extended the `pragma target fuses' to require a config number
-           (starting at 0). For example:
-           pragma target fuses 0 1234
-         * an empty ELSIF clause would skip the wrong statement
-         * assignment to a constant array (aka lookup table) caused
-           the compiler to crash
-         * shift produced incorrect code
-         * arguments to a function marked recursive whose parameters are
-           placed (for example, var byte x at _port_b_buffer) wouldn't
-           work correctly
-
-2.00  -- 17 March 2006 fixes:
-         * a function called indirectly with a BYTE parameter was  
incorrectly
-           passing the parameter in W
-         * fixed `x = x + 1`
-
-2.00  -- 16 March 2006 fixes:
-         * a function called both directly and indirectly would not work
-           correctly when called directly
-
-0.95  -- 16 March 2006 fixes:
-         * word = word - 100 incorrectly turned into word = word + 156
-           (100, a byte, was incorrectly negated into a byte instead
-           of a word).
-         * bit AND/OR/XOR fail miserably if the values are not in the
-           same bank (val1 & val2 in different banks always fail,
-           sometimes if dst isn't in the same bank as val1 & val2 it
-           also fails).
-         * allow multiple config words (see c16f8x.jal)
-         * fixed SEGFAULT on missing END IF
-         * fixed A + A (was doing A + 1 instead of A << 1)
-         * change "A = B + A" to "A + A + B"
-         * if a constant expression is used in a FOR statement, and
-           a variable with the USING clause, if the variable cannot
-           hold the constant expression value an error is generated
-         * changed name to `jal 2.0'
-
-0.90  --  2 March 2006 fixes:
-         * I broke variable promotion in the last build when the same
-           variable is used as a destination.
-
-0.90  --  1 March 2006 fixes:
-         * include files not ending in an end of line have one appended.
-         * fixed HEX code generation for btfsc/btfss
-         * overlapping variables (using 'at') might be incorrectly
-           optimized away, causing problems with external assembly.
-         * fixed right shifting from a larger type to a smaller
-         * the results of binary expressions using unnamed or universal
-           constants take on the type of the other operand (fixes the
-           x < 0 problem)
-
-0.90  -- 24 February 2006 fixes:
-         * aliases from a smaller name to a larger one cause page faults
-         * page and databits fail after a CALL
-
-0.90  -- 23 February 2006 fixes:
-         * multiply & divide now work reliably when different sizes are
-           used
-         * `hardware stack overflow' is now an error. The compiler switch
-           `-warn-stack-overflow' changes this to a warning
-         * if a procedure is only called by an indirect procedure its
-           variables were not being allocated
-         * if an alias was used against something with a 'get or 'put
-           procedure, the proper 'get or 'put procedure wouldn't be found
-         * target_chip *must* now be defined using `pragma target chip ...'
-           this information is passed to the code generator to be included
-           at the top of the assembly file
-         * fixed two mistakes in c16f87x.jal
-         * added check to `is' clause to make sure the alias has a  
compatible
-           type
-         * fixed HEX code generation for arrays
-         * turned on TASK functions -- start and suspend
-
-0.90  --  1 February 2006 fixes:
-         * the expression `x - x' wasn't optimized out at the p-code layer
-           causing the PIC generator to fail
-         * cannot use an array element in an `at' expression
-         * removed some errant printf's() used for debugging
-         * cannot use an array element in asm instructions
-         * state not saved correctly on ISR entry/exit
-         * arrays can be passed into functions
-         * arrays can be used in assignments
-         * arrays and constants don't need explicit sizes, eg
-           var byte x[] = { 1, 2, 3, 4, 5 }
-           var byte x[] = "this is a test"
-         * new keyword, COUNT(x), returns the number of elements in array  
x,
-           and can be used anywhere a constant is expected. For example:
-             var byte x[] = "hello"
-             var word y[count(x)]
-         * procedure(byte in out x) now works correctly if x has 'put
-           procedure
-         * fixed resolving like-named variables and pseudo functions
-0.90  -- 19 January 2006 fixes:
-         * an OUT parameter can now be either a 'put procedure or an array
-           element
-         * UNIVERSAL constants work as expected
-         * ``if (array(n)) then...'' works
-         * the compiler version is written when `pjal' is executed by  
itself
-
-0.90  --  1 January 2006 fixes:
-         * call to retlw changes to movlw (was deleted)
-         * intrinsicly generate 'get & 'put routines if necessary
-         * lookup tables were crossing 256 byte boundaries
-         * assembly output wasn't always correct
-         * changed to arithmetic shift right for signed numbers
-         * allow inline assembly jump or call to constant
-         * fixed multi-byte shifting
-         * fixed multi-byte andb/orb/xorb
-         * partially fixed recursive functions
-
-0.90  -- 24 December 2005 fixes:
-         * fixed x = y >> # where x is volatile
-
-0.90  -- 21 December 2005 fixes:
-         * fixed compiler directives; anything past ``IF 0 THEN...''
-           is now skipped entirely (no processing, so it can be used
-           for block comments)
-         * unless the debug flag is set, the assembly file will stop
-           at the `end' statement
-         * added `-nocodegen' argument. When this is present no assembly
-           code is generated
-         * added `-Wdirectives' argument. When this is present any compiler
-           directives found will show up as warnings
-         * fixed bit constants, for example:
-           CONST dummy = true
-           will now create a bit constant instead of a byte constant
-         * changed the variable allocation such that
-           PRAGMA TARGET CHIP x
-           and
-           CONST TARGET_CHIP x
-           create the same type of variable.
-         * the code size displayed was off by 1 (it was showing the  
greatest
-           value of the PC, which ignored the last instruction).
-
-0.90  -- 15 December 2005 fixes:
-         * in some situations parameters would be incorrectly marked
-           CONST
-
-0.90  -- 14 December 2005 fixes:
-         * a bug in bit-variable allocation could cause unexpected
-           aliasing
-         * and/or/xor from single bit to single bit where the destination
-           and one of the operands are the same would fail
-         * and/or/xor from single bit to single bit logic was restructured
-         * temporary reduction was broken during the code restructure
-           so it has been removed for the time being
-
-0.90  --  7 December 2005 fixes:
-         * return value in w doesn't work except in the explicit
-           case (eg, return x)
-         * when a value is returned in w, it should be the first
-           one assigned as the other assignments might destroy the
-           contents of W
-
-0.90  -- 28 November 2005 fixes:
-         * bit inversion on assign bit --> bit (non-volatile, the volatile
-           case was handled in the 23 November fix)
-         * an unassigned temporary was being used in certain function calls
-           causing odd results
-         * introduced boolean temporaries and changed all relationals
-           to return a boolean
-
-0.90  -- 26 November 2005 fixes:
-         * bugs in branch optimizer caused the produced code size
-           to explode after certain boundaries, and also to fail
-           after about 4K
-         * another bug in the branch optimizer would fail if a label
-           ended up on a 2K boundary
-         * constant sign extension logic was wrong
-         * equality operator with constants was wrong in some cases
-         * arrays with multi-byte entries were wrong (offset was added
-           to _ind)
-         * added branch[hi|lo]_nop when debugging so the assembly file
-           will compile
-
-0.90  -- 23 November 2005 fixes:
-         * unary bit operators now work as expected
-         * bit inversion on assign bit --> bit
-
-0.90  -- 21 November 2005 fixes:
-         * fixed a branch bit optimizer bug
-         * added `signed/unsigned mismatch'' and ``assignment to smaller
-           type'' warnings
-         * added `-Wno-conversion' and `-Wno-truncate' to turn off the
-           above warnings
-         * added `errorlevel -306' to suppress the page boundary warnings
-           in MPASM
-         * added `errorlevel -302' to suppress the `access outside of bank
-           0'' warnings in MPASM
-         * fixed annoying bit where if the first statement after an include
-           had an error, the error would be reported at the end of the
-           included file
-         * fixed an error in the increment & decrement operators where
-           the statement, ``return x+1'' would try to store the result at
-           location 0
-
-0.90  -- 19 November 2005 fixes:
-         * Variables in procedures called in interrupt context were not
-           allocated correctly
-         * The relational inverses were incorrect in some paths
-         * The constant 0 wasn't handled correctly which caused !0
-           to also be 0.
-
-0.90  -- 17 November 2005 fixes:
-         * assign to a volatile single bit inverted the result
-         * incorrect use of free() could have caused memory corruption
-           (but for some reason didn't)
-         * passing parameters to a routine that doesn't take any
-           parameters caused the compiler to crash
-
-0.90  -- 14 November 2005 fixes:
-         * fixed relationals used in expressions (y = x <= z)
-         * minor optimization when the destination is a non-volatile bit
-         * fixed equalities used in expressions (y = x == z)
-         * minor optimization when the destination is a non-volatile bit
-         * fixed a bug in the pic branch optimizer -- infinite loops were
-           not detected causing an infinite loop in the optimizer
-         * fixed a bug in the pic conditional branch code -- in addition
-           to the relational and equality operators the logical, not,
-           and complement operators should also be allowed.
-         * in JAL, '!' is bitwise complement, not logical
-         * if a variable is assigned but not used, do not eliminate it
-           if it has a master and the master is used
-
-0.90  -- 12 November 2005 fixes:
-         * an alias parameter whose master was volatile in a 'put routine
-           didn't compiler correctly
-         * did not have the correct logic for relational inverse
-         * the FOR loop didn't work correctly
-
-0.90  --  9 November 2005 fixes:
-         * shadowing a byte parameter wasn't working
-         * added the `using' clause I claim to support in the FOR loop
-         * fixed a bug in array indexing
-         * optimized multiply & divide -- if the same parameter are used
-           the function is not called (since the result will be the same)
-           for example:
-               x = n % 10
-               y = n / 10
-           since the result of (n/10) is still in the accumulators, this
-           becomes
-               x = n % 10
-               y = pic_div_quotient
-         * fixed a bug in the relational operators
-         * fixed a bug in the signed relational operators
-         * allow `pragma' in assembler blocks
-         * allow labels on lines by themselves in assembler blocks
-         * fixed three indirect function bugs
-           * if a parameter to an 'put function is never used, don't
-             try to assign to it
-           * always assume an indirect function is used if called
-             indirectly
-           * assign function --> function ptr wasn't working
-         * work on stack depth calculations ; currently assumes that
-           an indirect function does not call any other functions
-         * volatile is now inherited. for example:
-           ---
-           var volatile byte port_b_direction at {0x86, 0x186}
-           var bit pin_b0_direction at port_b_direction : 0
-
-           pin_b0_direction = low
-           ---
-
-           formerly, pin_b0_direction would be optimized out because
-           it is never used. Now, since it refers to port_b_direction
-           and port_b_direction is volatile, it is not optimized away.
-         * changed `-nopcode' to `-pcode'
-         * reduced code size for relational branching
-         * fixed assembly from constant lookup tables
-         * fixed passing bits or arrays in W
-         * fixed multi-byte decrement
-         * fixed signed divide
-         * added identities:
-           x / -1 = -x
-           x * -1 = -x
-         * fixed multi-byte lookup table assignments
-         * untyped constants now use the smallest possible representation
-
-0.90  --  2 November 2005 fixes:
-         * fixed bit constants
-         * added some more optimizations
-            * x == 0 --> !x
-            * x != 0 --> !!x
-            * x == 1, x a single bit --> !!x
-            * x != 1, x a single bit -->  !x
-         * fixed a bug in the conditional branch ahead optimization:
-            goto [true|false] val lbl1
-            goto lbl2
-            lbl1:
-            -->
-            goto [false|true] val lbl2
-         * fixed a cosmetic bug where branchhi_clr was changed to
-           branchlo_clr when unneeded but kept
-         * fixed a bug where the internal program counter was incorrect
-           causing the resulting HEX file to be wrong
-         * added another optimization
-           * x ^ 255 --> comf x
-         * fixed a bug translating branchlo_[set|clr] from inline assembly  
to
-           pic asm
-         * fixed indirect calls (volatile parameters)
-         * added `-long_start' flag to force the first 3 instructions to  
be a
-           long jump to the program start. This is needed by some  
bootloaders.
-
-
-0.90  -- 31 October 2005 fixes:
-         * ``if (!x) then ...'' would compile the same as ``if (x)  
then...''
-         * the inline-assembly function, ``asm bank movfw x'' would always
-            set the high & low bank bits
-         * added a couple of branch optimizations:
-            * _temp = !x
-              branch [true|false] _temp, ...
-              --> branch [false|true] x, ...
-            * _temp = !!x
-              branch [true|false] _temp, ...
-              --> branch [true|false] x, ...
-         * fixed NOT and LOGICAL operators
-         * fixed `pragma keep [bank|data]'
-         * fixed `a = b +/- c', where c is a variable
-         * fixed `a = b +/- c', where c is a constant
-
-0.90  -- Initial release -- 30 October 2005
-
-Bugs
-====
-
-Of course not! If you find one, please drop me a note:
-
-mailto://[email protected]
-
-There are two known issues however (not bugs mind you):
-
-1. The assembly file always has ``list p=16f877'' regardless of the
-   actual processor being used.
-
-2. The TRIS instructions, according to the PIC12C5XX datasheet, should
-   be 0x0005, 0x0006, and 0x0007 (for TRIS 5, TRIS 6, and TRIS 7).
-   MPASM emits 0x0065, 0x0066, and 0x0067.
-

--

You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en.


Reply via email to