/
Changelog.txt
286 lines (215 loc) · 9.46 KB
/
Changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
Version 3.4.1
- Fixed an issue with the not operator on its own (should have
been turned into an assignment)
Version 3.4.0
- Completely revamped --gas output to make it easier to edit and
to support some constructs (like multiple .org) that could not
be used in earlier versions of --gas. DAT sections in --gas are
now quite human readable (and more importantly, modifyable).
- Preserve DAT section comments in --gas output.
- Changed #define for constants so that we can distinguish constants
in different objects.
Version 3.2.3
- Added --side option to create a SimpleIDE .side file.
Version 3.2.2
- Fix coginit/cognew of Spin methods in C mode
- Added --version flag (also -v)
- Fixed a problem with calculating labels after DAT section
expressions like FOO[3]
Version 3.2.1
- Print (some) PASM comments in gas output
- Fixed -c switch for fastspin
- Fixed a bug with multiple coginits
- Fixed a bug in translation of wordfill/bytefill to C
- Make coginit/cognew of Spin methods work with old PropGCC library
Version 3.2.0
- Use a simpler, faster multiply routine if the program never needs
the upper 32 bits of the result.
- Added code for optimizing divides by integer powers of 2
- Fixed a bug printing non-ASCII characters
- Fixed several issues preventing the S3 source code from converting
to C.
- Use C "switch" statements for Spin case where all the labels are
constant
- Add basic common subexpression elimination option (--cse). This is
not enabled by default because it still has some issues.
Version 3.1.3
- Use "res" for FCACHE space
- Fix bug involving local variables that are arrays
- Improve re-use of variable memory
- Optimize away some redundant branches
Version 3.1.2
- Use "res" instead of "long" to define the object block
- Slightly improve loop optimization by re-arranging optimize passes
- Fix multi-pin assignments to be atomic
- If fastspin.exe is invoked as bstc.exe, it tries to mimic bstc's
output.
Version 3.1.1
- Make leaf functions share temporary registers and local variables
- Do not inline functions whose calling conventions
require stack manipulation
Version 3.1.0
- Added (preliminary) --p2 support for Propeller 2.
- Added fcache support for Propeller 1.
- If a function is called only once, and we can eliminate it by
inlining it, do so.
Version 3.0.6
- Added a check to make sure the immediate is on the right operand
(previously "mov #2, 3" was parsed the same as "mov 2, #3")
Version 3.0.5
- Added --eeprom option to produce an EEPROM file
- Added --cc= option to change C compiler
- Improved optimization of pin masks in some cases
- Allow {++ ... } to insert C++/C code inside PUB or PRI.
- Changed the __SPIN2X__ define to __SPINCVT__. The old __SPIN2X__
symbol is still defined in the preprocessor for now, but is deprecated.
- Added a fastspin front end that mimics the openspin arguments.
Version 3.0.4
- Tweaked a few items in the GUI
Version 3.0.3
- Fixed a problem with the round() function not being recognized in
C/C++ code, and with round() and trunc() output.
- Fixed abort with no explicit expression in C/C++
Version 3.0.2
- Added support for SPR and for arrays in cog memory generally.
- Allowed --data=cog
Version 3.0.1
- Fixed the distributed .zip file to have the correct spin2cpp
versions.
- Added a Spin prefix function for --asm output (so other Spin
compiler may be used)
Version 3.0.0
- Added a code generator to allow for PASM output. spin2cpp --asm can
function as a compiler independent of PropGCC. With --code=hub it
will produce LMM code, otherwise it produces COG code. Using
--binary after --asm will cause a final binary to be produced. Using
-g after --asm will cause the original Spin code to be inserted in
the .pasm output.
- Added a simple GUI (spinconvert). See the Help option in spinconvert
for details
- Added predefined symbols: __SPIN2CPP__ for C/C++ output,
__SPIN2PASM__ for assembler output
- Added IF/THEN/ELSE expressions, e.g. x := IF x>0 then 0 ELSE x-1
- Extensive internal changes
==========================================================================
Version 1.96
- Made the PASM file directive search the same way we look for Spin files
- Added -I and -L options to search for files in a different path
- Functions which do not return a value are now declared as void
- Fixed coginig/cognew on Spin methods that are not static
- Some internal clean-ups
Version 1.95
- Improved detection of static member functions
- Implemented coginit/cognew for Spin methods (still WIP)
- Removed the volatile qualifier from __asm__ at top level (the C++
parser likes it, but plain C does not)
- Added commonly used C functions like strcpy to the list of C reserved
words that we check for name conflicts
- Fixed a preprocessor problem with long file names
Version 1.94
- Declare methods that obviously don't use object variables as "static"
- Supported the bstc @@@ operator (only in --gas mode right now)
- Implemented SPR pseudo-variable for hardware registers
- Cleaned up handling of -o option for .dat, .elf, and .binary
- Fixed some output problems in --gas mode
- Various minor bug fixes
Version 1.93
- Made for loop output more idiomatic
- Print symbolic constants rather than the values they resolve to
- Fixed illegal characters in file names used as class names
- Added some debug directives
- Made -o option more useful with --binary
- Really fixed --binary checksum setting
- Added support for setting _clkfreq and _clkmode
Version 1.92
- Made the lookup/lookdown output code compatible with more recent gccs
- Fixed --binary checksum calculation
Version 1.91
- Preserve comments in Spin code.
- Recognize foo.long[N] syntax.
- Use C for loops for more Spin repeat loops.
- Use memset for the common case of filling memory with 0.
- Added clksPet and clkmode.
- Preserve original case of Spin identifiers (unless --normalize is
given).
- Automatically add volatile qualifier to class variables if some
class members are accessed via the address operator.
- Added --catalina option to run convert to C then run Catalina C compiler.
Version 1.05
- Fixed a problem with double negation or negation of boolean operators
being printed as a predecrement.
- Fixed usage of ID[n] in PASM code (where ID is a constant).
Version 1.04
- Fix precedence of NOT operator
- Add quoting for spaces inside file names
- Produce an error for redefined labels in DAT sections.
- Rename constants that start with an _ to avoid conflicts with C.
- Fix "reversed" range expressions like OUTA[9..10].
Version 1.03
- Use for() loop instead of do/while for simple counting loops
- Added a -o option to specify the output file name
- Fixed error messages after #include (so correct line number and file
information is preserved)
- Made the search paths for #include and OBJ sections relative to the
currently processed file.
- Added --binary output option to produce a .binary file
- Fixed a bug in the DAT section output for classes with names that
have "Spin" appended.
- Fixed DAT section output in C mode.
- Fixed several other miscellaneous bugs.
Version 1.02
- Made CON section accept x[y] syntax for skipping over ranges of values
- Modified C/C++ output so that unused return values are not declared
- Fixed reboot command to really reboot (not just abort)
- Fixed a typo which could cause segmentation faults
- Follow Spin's practice of allowing the first object of an object
array to be used without a subscript.
- Accept annotations on the DAT section of a file.
Version 1.01
- Output symbolic names for constants instead of the constant value itself
- Added missing =>= and =<= operators
- Put the spin2cpp version number in the comment header of generated
files
Version 1.00
- Fixed a problem with parsing negative floating point constants
- Fixed use of $ in PASM data declarations
- Some fixes to the internal source code
Version 0.99
- Added preliminary support for translating PASM to GAS (--gas)
- Added support for waitpne and waitpeq
- Fixed the trunc operator
- Fixed some issues with constants declared in other objects
- Fixed a problem with catching abort of functions with no parameters
Version 0.98
- Cleaned up and improved preprocessor
- Added #include, #elseifdef, #elseifndef
- Further improved Catalina support
- Fixed an issue with returns inside if statements
- Made error messages more consistent (now they all have the format
"file:line: message", like Catalina and gcc)
Version 0.97
- Added a simple preprocessor similar to the one in bstc
- A comment giving the command line is output at the start of files
- Somewhat improved support for Catalina
- Some minor bugs fixes
Version 0.96 New in this version:
- preliminary support for output of C code instead of C++
- fix the order of defines so constants in one object may be used to
define constants in another object
- support for placing C code inline in the Spin code (via "annotations")
- bug fix for reverse()
- sort variables the way Spin does
Version 0.95. New in this version:
- arrays of objects
- fix outa[pin] with variable pin
- handle TAB characters correctly
- various other bug fixes
Version 0.9. New in this version:
- correct handling of files that do not end in a newline
- fixed array references
- fixed nesting of objects more than 2 deep
- work around some library and compiler issues with the abort feature
- better handling of bit set and clear
- fixed a bug preventing PASM instructions from always being aligned
- --files option to list generated .cpp files
- --elf option to automatically invoke propeller-elf-gcc to compile the .spin file