Karri Kaksonen
786b4310d0
Merge branch 'cc65:master' into atari7800
2022-03-05 19:09:05 +02:00
acqn
c8956ce19b
Fixed signed long comparisons with smaller unsigned types.
2022-03-03 20:24:14 +08:00
Bob Andrews
0587d9f5d4
Merge pull request #1675 from acqn/ShiftFix
...
[cc65] Fixed bitwise shift with numeric constant operand(s)
2022-03-01 19:50:21 +01:00
Karri Kaksonen
3266e70de4
Add target atari7800
2022-03-01 06:44:55 +02:00
acqn
5ef420af5a
Fixed OptCmp1 with certain code patterns with labels.
2022-03-01 10:40:01 +08:00
Jeff Tranter
2bf8be5b3b
Fix some commonly made spelling errors in comments.
2022-02-21 15:44:31 -05:00
acqn
2bda128ef1
Fixed LimitExprValue() for 64-bit long env.
2022-02-26 23:02:51 +08:00
acqn
14988f5dda
Fixed bitwise shift with numeric constant operand(s).
2022-02-16 20:10:54 +08:00
Spiro Trikaliotis
364e72921c
ca65: .constructor after .export fails
...
The actor directives (.constructor, .destructor, .interruptor, and .condes)
can't handle a symbol that's already exported.
The relevant code does the checks in the wrong order.
For example, the following correct snippet does not assemble:
.export C
C: .constructor C, 5
The assembler outputs: test.s:2: Error: Address size mismatch for symbol 'C'
Exchanging both lines makes it work.
This fixes #1647 ; the patch is provided by 'kugelfuhr' and taken from there.
2022-02-15 22:03:47 +01:00
Spiro Trikaliotis
3d0013ab30
Invalid flagged errors if token is missing
...
A missing factor in an expression causes an expected but missing token
to be skipped, leading to invalid flagged errors in the following line:
l = 3 +
lda #$00
An error should be output for line 1, but not for line 2. Actually, both
are flagged as errors:
test.s(1): Error: Syntax error
test.s(2): Error: Unexpected trailing garbage characters
This patch (as proposed in issue #1634 by kugelfuhr) fixes this.
2022-02-15 21:46:07 +01:00
Bob Andrews
24c8de87c2
Merge pull request #1662 from acqn/StructFix
...
[cc65] Fixed ICE on unnamed bit-fields declared with typedef'ed types
2022-02-14 17:31:45 +01:00
Greg King
86b6514c16
Added code that avoids infinite loops that were caused by circular references
...
(a symbol that was defined by referring to itself directly or indirectly). Patch by kugelfuhr.
2022-02-13 07:38:00 -05:00
Greg King
112e216e53
Removed an obsolete command-line option from the cc65 compiler.
2022-01-30 22:10:06 -05:00
Matthew D. Steele
22a3d55e40
Add space after function names
2022-01-08 16:39:30 -05:00
Matthew D. Steele
1f6bc6240f
Move local variable declaration to top of block
2022-01-08 16:29:42 -05:00
Matthew D. Steele
92bfbeb8ab
Adjust Pop() sequencing in paravirt.c
2022-01-08 16:24:40 -05:00
Matthew D. Steele
cf1bc4fad4
Fix Pop() implementation in src/sim65/paravirt.c ( fixes #1625 )
...
The Pop() function was not handling stack pointer wrap around correctly.
Also, change the simulated RTS implementation in ParaVirtHooks() to
explicitly sequence the two Pop() calls in the correct order.
2022-01-07 09:56:46 -05:00
acqn
6beb090193
Fixed anonymous bit-fields declared with typedef'ed type names.
2022-01-03 23:54:14 +08:00
acqn
38511843e5
Fixed crash with labels in non-function/block scopes.
2022-01-03 23:50:48 +08:00
Bob Andrews
6a76d6d905
Merge pull request #1611 from polluks2/patch-3
...
Fixed many typos
2021-12-13 20:05:31 +01:00
polluks2
1d3318c247
Fixed many typos
2021-12-13 17:20:56 +01:00
polluks2
9e9b3dbaca
Fixed typo
2021-12-13 17:14:57 +01:00
Greg King
325ff9667e
Used (size_t), instead of (long) where converting between pointers and integers.
...
(long) still is 32 bits on 64-bit Windows!
2021-12-12 19:40:43 -05:00
Bob Andrews
332742b688
Merge branch 'master' into master
2021-12-11 22:35:50 +01:00
Oliver Schmidt
8b0de8a931
Merge branch 'master' into master
2021-11-23 22:56:51 +01:00
empathicqubit
fd8d51497c
Add --debug-tables <filename> option and output struct and union fields
2021-09-29 05:20:44 +02:00
acqn
eeaa111835
Fixed crash in Opt_a_toscmpbool caused by wrong order of condition checks.
2021-09-28 17:02:37 +02:00
Greg King
fcda94f258
Made a slight improvement in the ld65 expression evaluator.
2021-06-13 20:36:05 -04:00
acqn
25a35d6b59
Fixed result type of certain operations, which was broken with the bit-field fix.
2021-06-10 21:54:32 +02:00
acqn
5adb29ce31
Made "bit-field-ness" a type property instead of a SymbolEntry or ExprDesc property.
...
Fixed integer promotion and result type in certain operations.
Fixed bit-fields 'op=' and postfix inc/dec operators.
2021-06-09 08:03:12 +02:00
acqn
1d7bf7355c
Better function naming in declare.c.
...
Scalar initialization routines need only 'const Type*' as parameters.
2021-06-09 08:03:12 +02:00
acqn
004c60de39
Optional flags for the codegen to skip restoring the expression results into the primary registers.
2021-06-09 08:03:12 +02:00
acqn
dcacba472a
Moved ArithmeticConvert() from cc65/expr.c to cc65/datatype.c.
...
Reorganized a few functions in cc65/datatype.c.
Added SignedType() and UnsignedType() for future usage.
Made LimitExprValue() external so that it can be used more often.
2021-06-09 08:03:12 +02:00
Filip Golewski
09862e7ce9
Update src/msbuild.cmd script to optionally include Visual Studio 2019 Community build tools
2021-06-08 21:16:20 +02:00
polluks2
ed9f9ccbab
Fix #1536
2021-06-07 23:12:50 +02:00
Wayne Parham
69e2313a63
First round of requested code changes
2021-06-06 23:20:54 +01:00
Greg King
1c16e46f23
Improved ld65's error messages about ca65's .BANK() function.
...
* Split a message into two more specific messages.
2021-06-05 11:31:28 -04:00
Greg King
39ef63cbbc
Don't check for circular references of imports that don't have matching exports.
...
This fix will avoid referring to a struct member through a null pointer.
2021-06-04 13:35:26 -04:00
bbbradsmith
d5d9183ccf
conform to prevailing if bracket style
2021-06-04 07:09:58 -04:00
bbbradsmith
6ebe551919
return is sufficient, TooComplex flag is unnecessary to resolve this crash case
...
suggested by greg-king5 in #1409
2021-06-04 07:09:58 -04:00
bbbradsmith
3584c4c87f
fix crash when a NULL ExprNode is checked for circular references
2021-06-04 07:09:58 -04:00
acqn
4d5fe38540
Fixed OptStackOps when the stuff pushed on stack top is accessed before the op.
2021-06-03 12:03:53 +02:00
acqn
79be6dec16
More quick hack for CE_GenRegInfo.
2021-06-03 12:03:53 +02:00
acqn
0bfa13722b
More funcinfo on register usage fixes.
2021-06-03 12:03:53 +02:00
Greg King
0d3c827d80
Made the C preprocessor #if nesting stack have 256 levels.
...
Closes #1523 .
2021-05-30 03:52:32 -04:00
Greg King
d14148ab4f
Restricted commit b9a3c78888
to classic-style Assembly macros.
...
.include will work at expansion-time for .define macros.
2021-05-17 19:48:47 -04:00
acqn
1450f146a5
Fixed '[]', '()' '.' and '->' operators following a postfix increment/decrement.
2021-05-16 20:43:49 +02:00
acqn
43ca887263
Fixed 'case'/'default' labels in non-compound 'switch' body statement.
2021-05-16 20:43:49 +02:00
WayneParham
e9fd87d07a
Merge branch 'master' into master
2021-05-16 10:02:37 -05:00
acqn
f5dacda69b
NoCodeConstExpr() fix to avoid exessive error messages.
2021-05-16 19:08:43 +08:00
acqn
6a3b9a9880
E_ADDRESS_OF logic fix.
2021-05-16 19:08:42 +08:00
acqn
aac03eae6f
Better future-proof bit-masking.
2021-05-16 19:08:42 +08:00
acqn
2d014383cd
Replaced certain usage of "(New-)PointerTo()" with "AddressOf()".
2021-06-08 00:43:26 +08:00
acqn
924fcf5d06
Replaced several occurance of PtrConversion() with StdConversion().
...
Variadic arguments of functions should be default-promoted.
2021-06-08 09:32:58 +08:00
acqn
18ae09f682
Less excessive errors with failed array declarations.
2021-05-14 10:48:17 +02:00
acqn
dfba8d77ca
Error messages shouldn't raise warnings about unused expressions by themselves.
2021-05-14 10:48:17 +02:00
Greg King
e5813cfb1a
Removed two duplicate TYPEDEFs from a header.
...
The first one is replaced by an #include of the header that has its original TYPEDEF.
The second one is replaced by its base type.
That change allows pedantic C90-compliant compilers to accept the header.
2021-05-13 00:24:32 -04:00
Greg King
af4c4f6aaf
Removed a "return" keyword from an inline function that must return (void).
2021-05-12 19:43:32 -04:00
Andrea Odetti
05f545e189
More line number related changes.
2021-05-11 17:41:59 +02:00
Andrea Odetti
93762a2117
ld65: move 2 more cases to the notation file:line.
2021-05-11 17:41:59 +02:00
Andrea Odetti
feccc68c54
ld65: avoid redundant error message information.
2021-05-11 17:41:59 +02:00
Andrea Odetti
bcc670ee36
Standard formatting of error messages.
...
https://www.gnu.org/prep/standards/html_node/Errors.html
Issue: https://github.com/cc65/cc65/issues/1494
2021-05-11 17:41:59 +02:00
Bob Andrews
82ee502f57
Merge branch 'master' into wrapped-call
2021-05-11 14:16:25 +02:00
mrdudz
07dd1e3849
fix formatting
2021-05-11 14:14:44 +02:00
mrdudz
18f94d1fe0
rework to use a magic value instead of a flag, as suggested by Oliver
2021-05-11 14:00:49 +02:00
mrdudz
ef74226993
improve error message
2021-05-11 13:37:53 +02:00
Oliver Schmidt
b7856ddd4f
Just some source formatting adjustments.
2021-05-11 10:40:44 +02:00
Wayne Parham
a2def19de5
Added TGT_SYM1
2021-05-10 15:20:49 +01:00
Wayne Parham
f81aefe8bd
Synertek Systems Sym-1 config files
2021-05-09 17:13:24 -05:00
Wayne Parham
044a0838a3
Changes to existing cc65 source to support Synertek Systems Sym-1
2021-05-09 16:52:48 -05:00
mrdudz
0fbf2af09d
Fix the warning that is produced for unused functions
2021-05-08 01:03:43 +02:00
mrdudz
c9f242e566
Extend #pragma wrapped-call to support "bank" argument
2021-05-05 14:42:29 +02:00
Marco Aurelio da Costa
04cd884f8f
Prevent missed .ENDMACRO in included file
2021-05-02 14:17:11 +02:00
Marco Aurelio da Costa
b9a3c78888
Parse file included inside a macro at definition time
2021-05-02 14:17:11 +02:00
Evgeny Vrublevsky
8e02f8f5ec
Add .REFTO as an alias to .REFERTO. Update the docs related to it.
2021-04-29 07:55:43 -04:00
Evgeny Vrublevsky
50a58e7706
Added documentation for the .REFERTO.
2021-04-29 07:55:43 -04:00
Evgeny Vrublevsky
83e7c37277
Use .REFERTO instead of .REF as the command.
2021-04-29 07:55:43 -04:00
Evgeny Vrublevsky
e9a72b2462
Add .REF control command implementation.
2021-04-29 07:55:43 -04:00
acqn
71bd6415d6
No more unnecessary jump-over labels generated for logical OR false cases.
2021-04-24 23:53:26 +02:00
Oliver Schmidt
5d84a4ba13
Removed non-ASCII chars.
2021-04-19 16:06:10 +02:00
Oliver Schmidt
f272bc8f42
Removed non-ASCII chars.
2021-04-19 15:50:52 +02:00
Marco Aurelio da Costa
fd3d5d35fb
mc: Implemented .LITERAL
2021-04-19 15:42:29 +02:00
acqn
f901adba22
Predefined type strings for inlined std function parameters.
2021-04-19 15:36:55 +02:00
acqn
9cea9ce5e2
Made the code more constness-correct with 'Type' usage.
2021-04-19 15:36:55 +02:00
acqn
cb64aaf20c
Made the code more constness-correct with 'Type' usage for inlined std functions.
2021-04-19 15:36:55 +02:00
acqn
328345b9c3
Removed a helper function that is no longer used.
2021-04-19 15:36:55 +02:00
acqn
24d36854d2
Minor cleanups with array element qualifiers.
2021-04-19 15:36:55 +02:00
acqn
896f463a23
Used more specific pointers instead of the "arbitary attribute pointer" used in type strings.
2021-04-19 15:36:55 +02:00
acqn
bfb7c936aa
Preparation for constness-correction.
2021-04-19 15:36:55 +02:00
Evgeny Vrublevsky
ac08482fa3
Allow editing cc65.props from Property Manager.
2021-04-18 21:12:51 +02:00
Evgeny Vrublevsky
ee8c7b47bc
Add new lines at the end of the project files.
2021-04-18 21:12:51 +02:00
Evgeny Vrublevsky
7be3b53f72
cc65.props uses spaces instead of tabs.
2021-04-18 21:12:51 +02:00
Evgeny Vrublevsky
2120dd662c
Move all common project settings into cc65.props.
2021-04-18 21:12:51 +02:00
Marco Aurelio da Costa
83ee928fb1
mc: Formatting, remove stray lines
2021-04-18 20:39:05 +02:00
Marco Aurelio da Costa
c915b5d7f3
Implemented charmap stack
...
New commands:
.PUSHCHARMAP: will push the current charmap state into an internal stack
.POPCHARMAP: will restore the current charmap to the last pushed charmap
Details:
The push and pop facilities are implemented directly inside the tgttrans.h,
to facilitate its reuse on the C compiler.
2021-04-18 20:39:05 +02:00
acqn
6e61093e79
Fixed pointer subtraction in certain very rare cases.
2021-04-17 11:14:37 +02:00
acqn
e9545d68ee
Minor clean-ups and typo fixes.
2021-04-17 11:43:03 +08:00
Dirk Lehmann
eb1cf750f2
-W-unreachable-code option added, alphabetic order of --list-warnings
2021-04-13 09:37:55 +02:00
acqn
e435da6234
Interim fix for Issue #897 .
2021-04-06 22:20:39 +02:00
acqn
bd8eae67f1
Fixed local struct field access via the address of the struct.
2021-04-05 15:49:54 +02:00
acqn
1a3628df1a
Fixed the term 'argument' vs 'parameter' in function parser.
2021-04-03 17:50:46 +02:00
acqn
2864b3ef8a
Fixed composition of prototypes and old-style function definitions with default promotions.
...
Fixed function parameter list comparison with empty ones.
2021-04-03 17:50:46 +02:00
acqn
91fd30611a
Fixed ICE on error cases such as '&func + int a'.
2021-04-03 17:45:52 +02:00
acqn
4a38965384
Warnings on discarding pointer qualifiers always.
...
Added new -W options to turn on/off warnings on certain pointer conversion cases:
- pointer-sign: to a pointer type differing in pointee signedness. Default on.
- pointer-types: to a pointer type incompatible. Default on.
2021-03-30 19:41:20 +02:00
acqn
b802efde54
Fixed ternary result type detection with pointer types.
...
Fixed pointer type comparison and conversion, especially regarding qualifiers.
Improved diagnostics about type comparison and conversion.
Reorganized some type-comparison/conversion functions.
2021-03-30 19:41:20 +02:00
acqn
f9812930c1
More detailed diagnostic info about conflicted function types.
2021-03-30 16:47:57 +08:00
acqn
cb8fbf4772
Removed the non-existing-in-C "struct/union scope" for structs/unions.
...
Fixed handling of struct/union field declarations without identifiers, which do nothing.
2021-03-29 19:28:22 +02:00
acqn
f273b1ebcb
Fixed crash with non-inlined __fastcall__ function invocation with no arguments.
2021-03-26 11:02:46 +08:00
acqn
3755e4a863
Replaced checking for __fastcall__ aginst AutoCDecl etc. with IsFastcallFunc().
2021-03-24 14:35:44 +08:00
acqn
3c2e7ce41c
More reliable test for true/false with addresses for AND, OR and ternary operators.
...
Minor comment typo fix.
2021-03-20 01:39:32 +01:00
acqn
f8835d2867
Fixed codegen with addresses as boolean test conditions.
...
Fixed warning on unreachable code of if body.
2021-03-20 01:39:32 +01:00
acqn
325b7b4ab3
Enabled 'a ? b, c : d'.
2021-03-20 00:09:47 +01:00
acqn
a51d6d40de
Ternary fix for some obscure cases.
2021-03-20 00:09:47 +01:00
acqn
6974c1ff12
Fixed and cleaned up codegen logic with arithmetic conversion in addition and subtraction.
2021-03-19 16:35:03 +01:00
Christian Groessler
cd116e5ba0
src/ar65/library.c: style fix
2021-03-18 22:27:42 +01:00
Christian Groessler
9b05fe9982
src/ar65/library.c: fix compilation on Windows
2021-03-18 22:27:42 +01:00
Christian Groessler
358d750b3e
ar65: fix parallel builds by using a per-process temp file
2021-03-18 22:27:42 +01:00
Christian Groessler
64449f0f54
ar65: better version of last change
2021-03-18 22:27:42 +01:00
Christian Groessler
d3c495e8b9
ar65: fix parallel builds by using a per-process temp file
2021-03-18 22:27:42 +01:00
acqn
b02838439c
Changed g_addaddr_local() codegen to reduce code size.
2021-03-16 22:29:20 +01:00
acqn
8eeaaa3f36
Made certain types of comparison between addresses in constant expressions work.
2021-03-16 22:29:20 +01:00
acqn
99c7fe0ada
Reusing code from parseadd() for ArrayRef().
...
Now index[ptr] works in constant expressions.
Fixed codegen for cast type in constant expressions.
Calls on swapstk in 'i[ptr]' is avoided when possible.
2021-03-16 22:29:20 +01:00
acqn
f5972dfd08
Made int+pointer work in constant expressions.
...
Fixed codegen for cast type addition in constant expressions.
Calls on swapstk in 'i+ptr' is avoided when possible.
2021-03-16 22:29:20 +01:00
acqn
aa6fdf58b8
Addresses in constant subtraction expressions now work.
...
Fixed codegen for cast type subtraction in constant expressions.
2021-03-16 22:29:20 +01:00
acqn
c4a2620e29
Added an utility function to check for quasi-constant addresses (of stack variables).
2021-03-16 22:29:20 +01:00
acqn
0a8ca3041a
Changd all Find*Last*InOpenRange() to return the beginning of the open range.
...
Fixed FindArgLastUsageInOpenRange().
2021-03-16 22:24:19 +01:00
acqn
4376b83390
Fixed LoadAAt().
2021-03-16 22:24:19 +01:00
acqn
bd5d5b7385
Removed the prototype of evalexpr() that no longer exists.
2021-03-16 22:24:19 +01:00
acqn
047d0f479b
Comments format fix.
2021-03-03 10:07:24 +01:00
acqn
2aad72af90
Removed trailing whitespaces.
2021-03-03 10:07:24 +01:00
acqn
3caceb8174
Fixed result type in certain contant expression addition cases.
2021-02-26 19:45:46 +01:00
acqn
f2eed38fc8
Fixed expression type of the result of numeric constant comparison.
2021-02-26 19:45:46 +01:00
acqn
ea0c634e12
Improved codegen for unsigned char type comparison with numeric constants.
2021-02-23 22:06:21 +01:00
acqn
d628772cd1
Fixed signed char type comparison with unsigned numeric constants.
2021-02-23 22:06:21 +01:00
acqn
f1c715c455
Fixed a bug that pointer subtraction results from two absolute addresses are calculated as unsigned long.
2021-02-22 14:14:59 -05:00
acqn
81d6321cd7
Fixed internal representation of calculated constant results.
...
Minor clean-up.
2021-02-22 14:14:59 -05:00
acqn
eadaf2fef8
Fixed deferred post-inc and post-dec in unevaluated context such as 'sizeof(i++)'.
2021-02-22 11:02:47 +01:00
acqn
40b26f4060
Now the compiler removes code that has no observable effect.
2021-02-22 13:47:32 +08:00
acqn
7f05bd797f
Now the compiler tracks code that has no observable effect.
2021-02-21 16:36:29 +08:00
acqn
55ae350fed
Fixed 'Opt_staxspidx' for the invariant of 'staxspidx'.
2021-02-17 07:03:11 -05:00
acqn
bfc7a51a44
Fixed Issue #1265 according to C89/C99 standards.
2021-01-30 14:31:51 +01:00
acqn
c9ac515286
Functions with no prototypes might use EAX registers.
2021-01-30 14:31:51 +01:00
acqn
a1992702f8
Declarations of 'extern' object and function should be visible in the file scope.
2021-01-30 14:31:51 +01:00
acqn
b99455cc47
Fixed Issue #1374 .
2021-01-19 14:33:27 +01:00
Rocky
a9b71b6207
return-type - new warning suppression type added
2021-01-06 16:05:04 +01:00
Jesse Rosenstock
e0c12c90cd
g_asr, g_asl: Use ROL/ROR for char shifts by >= 6
...
Instead of `val` right (left) shifts, we can also do `9 - val` left (right)
rotates and a mask. This saves 3 bytes and 8 cycles for `val == 7` and
1 byte and 4 cycles for `val == 6`.
2020-12-27 14:22:40 -05:00
Christian Groessler
ef258bdc19
remove TABs which again slipped in....
2020-12-25 07:16:26 +01:00
Jesse Rosenstock
dfd047ce6a
g_typeadjust: Use CF_CHAR for char args
...
If lhs and rhs are either both signed char or both unsigned char,
return flags for that type instead of (unsigned) int. The flags
are used only for codegen. Currently, this does nothing, since
codegen treats chars as ints unless CF_FORCECHAR is set, but it
allows more efficient char x char -> int codegen to be added in
the future.
2020-12-24 14:40:39 -05:00
Greg King
b2c1a77bb3
Fixed the cc65 code that optimizes 16-bit compares when the high bytes are known to be equal.
...
Only the low bytes are compared. Originally, signed 16-bit compares were optimized into signed 8-bit compares. But, the sign bits are in the high bytes; and, they're equal. Therefore, the low bytes always must be compared as unsigned numbers.
Fixes #1348 .
2020-12-24 12:27:09 -05:00
Tim Gates
2646c06f61
docs: fix simple typo, paramater -> parameter
...
There is a small typo in src/cc65/pragma.c.
Should read `parameter` rather than `paramater`.
2020-11-29 10:26:08 +01:00
Greg King
8b42f570e9
Fixed code that caused a seg-fault after parsing a (deferred) post-count argument followed by a (nested) function-call argument.
...
The old broken code defers the count until the end of the (parent function's) argument list. But, a nested function call clears the pointer to the deferred type. That leads to an access violation.
The new code defers only until the end of each argument. Fixes #1320 .
2020-11-20 17:45:14 -05:00
Oliver Schmidt
cffcbce60f
Bumped version.
...
I placed the Git tag V2.19 in hindsight at 555282497c
. But I certainly don't want to rewrite the Git history just for the reported version, so I simply set the reported version at today's HEAD to 2.19.
2020-11-20 19:11:20 +01:00
Zsolt Branyiczky
63543dee07
Revert transient modification of EATab Table 0 comment
2020-11-19 22:02:07 +01:00
Zsolt Branyiczky
527500cedc
instruction table contained wrong parameters at SIR opcode
2020-11-19 22:02:07 +01:00
Zsolt Branyiczky
0e98818db5
assembled SAC and SIR opcodes of 6502DTV cpu were wrong
2020-11-19 22:02:07 +01:00
Zsolt Branyiczky
130d3b52a2
new macros supporting 6502DTV cpu
2020-11-19 22:02:07 +01:00
Zsolt Branyiczky
4205a04a34
6502DTV is not a superset of 6502X more
2020-11-19 22:02:07 +01:00
Polluks
bd6e5927c4
Fixed #1341
2020-11-18 10:28:19 +01:00
Oliver Schmidt
116682c190
Avoid C99 idioms.
2020-11-16 18:08:00 +01:00
Jesse Rosenstock
060417b0dc
Adjust type of int constants that fit in char
...
When there is an integral constant like `3` in an expression, it has
type `int` according to the C spec, even though it can be represented
as an `unsigned char`. Change codegen (`hie_internal` and `typeadjust`)
to treat it as `unsigned char` instead of `int` so that faster,
unsigned operations can be used.
For the test case in #1298 , reduces the cycles per iteration from
4311 to 1884. This is a great improvement, but still much worse than
the 1053 cycles/iter from `c4698df~`, so more work remains to be done.
Further partial fix for #1298 and #1308 .
2020-11-16 00:56:19 +01:00
Greg King
2915464667
Fixed cc65's generation of char-type bit-shift code.
...
Fixed CHAR-to-INT type conversions in the right-shift code generator. Also fixed some printf-style format specifiers.
2020-11-15 15:22:23 -05:00
Zsolt Branyiczky
2d7777b604
Instruction table is synchronized with the c65's one
2020-11-15 16:35:55 +01:00
Zsolt Branyiczky
0f7cf87bfa
Synchronizin InsTab6502DTV instructions table for DTV with the illegal opcodes verified by VICE-emu tests
2020-11-15 16:35:55 +01:00
Zsolt Branyiczky
92c013944e
Mistyped comment, missing comma
2020-11-15 16:35:55 +01:00
Zsolt Branyiczky
b33b053307
add c64dtv support
2020-11-15 16:35:55 +01:00
Jesse Rosenstock
5db74b4b19
Use u16 codegen for u8 x u8 ops
...
In g_typeadjust, before we apply the integral promotions, we check if
both types are unsigned char. If so, we promote to unsigned int, rather
than int, which would be chosen by the standard rules. This is only a
performance optimization and does not affect correctness, as the flags
returned by g_typeadjust are only used for code generation, and not to
determine types of other expressions containing this one. All unsigned
char bit-patterns are valid as both int and unsigned int and represent
the same value, so either signed or unsigned int operations can be used.
This special case part is not duplicated by ArithmeticConvert.
Partial fix for #1308 .
2020-11-09 21:19:22 +01:00
Jesse Rosenstock
b5f0c0468d
Add stdint.h types for C89 compilers
...
Add `intN_t` and `uintN_t` for N = 8, 16, 32.
2020-11-03 21:24:52 +01:00
Jesse Rosenstock
65193c6aaf
Add stdint.h constants INT32_MIN and UINT32_MAX
...
These were missing before
2020-11-03 09:26:26 +01:00
acqn
07cc6a3d20
Made optimization steps aware of long branches better.
2020-10-24 21:25:24 +02:00
acqn
5c43d1e04f
Changed codegen for postfix inc/dec operations by deferring them till sequence points.
...
This usually allows faster & smaller code.
Note that deferred operations must still be called at sequence points even if the whole expressions containing them had constant values.
2020-10-20 22:01:55 +02:00
acqn
bb7b69f513
Added OptShiftBack for shifting the C flag into register A and back.
2020-10-20 21:55:39 +02:00
acqn
0354322413
Added OptSignExtened for testing signness right after sign extention.
2020-10-20 21:55:39 +02:00
acqn
9c776a24e5
Use bcc instead of bne in OptNegAX2 to ease optimizations.
2020-10-20 21:55:39 +02:00
acqn
4f3a96a535
Added new opt OptPushPop2.
...
Also renamed OptPushPop to OptPushPop1.
2020-10-20 21:55:39 +02:00
acqn
262c4235df
Symbols in ZP segments will use '.exportzp' instead of '.export' if exported.
2020-10-11 23:05:20 +02:00
acqn
e58c84acf7
Support for optionally specifying address size for segments with:
...
#pragma ***-name([push,] "name"[, "addrsize"])
where "addrsize" is any addressing size supported in ca65.
2020-10-11 23:05:20 +02:00
acqn
f8c9dde989
The instruction parser can now recognize ZP locations and set the addressing mode for them.
2020-10-11 23:05:20 +02:00
Jesse Rosenstock
81550ca1ee
CS_MergeLabels: Keep labels referenced by data
...
Partial fix for ICE in #1211 . This may fix enough to allow #1049 to be
fixed.
When merging labels, keep the first label with a ref that has no JumpTo;
this is a data segment label, used by computed gotos.
The real fix is to track and rewrite labels in data, but this is more
involved.
2020-10-08 12:11:03 +02:00
acqn
dbba5f3fc9
Fixed handling of %v in inline asm parser.
2020-10-04 12:25:24 +02:00
acqn
a85d5330fa
Fixed StrBuf initialization in PreparseArg().
2020-10-04 12:17:14 +02:00
Jesse Rosenstock
b931e65811
Fix ICE for bit-fields with typedef
...
Fixes #1267
Avoid ICE, but treat plain int bit-fields declared via typedef as
signed rather than unsigned. It is more efficient to treat them
as unsigned, but this requires distinguishing int from signed int,
and this is curently not done.
2020-10-03 15:04:31 +02:00
Greg King
c05a750f47
Fixed some copy-&-paste typo mistakes about HuC6280's TMA mnemonic.
2020-10-01 07:25:08 -04:00
acqn
b525554bfe
Added support for parsing asm byte size expressions with a pair of parentheses.
2020-09-27 12:22:05 +02:00
acqn
688342e194
Now every code entry has its argument parsed to tell some info.
...
It fixes the compiling performance regression as well.
Built-in ZPs are recognized.
2020-09-27 12:22:05 +02:00
acqn
cc0f8422f2
More fixes and new utils to check if opcode arguments can be used elsewhere.
...
Fixed tracking with LI_RELOAD_Y and LI_DIRECT.
Fixed tracking with LI_CHECK_Y and LI_RELOAD_Y.
2020-09-27 12:22:05 +02:00
acqn
f3771a465d
Fixed various issues in the usage-tracking code.
...
Added some utility functions.
2020-09-27 12:22:05 +02:00
acqn
d379affc4b
Moved some reusable code from cc65/coptstop.c into new files.
2020-09-27 12:22:05 +02:00
acqn
28c7aa2bc8
Replaced direct CEF_NUMARG flag checks on code entries with CE_HasNumArg().
2020-09-27 12:22:05 +02:00
acqn
c45a6b3685
Utility function ParseOpcArgStr().
2020-09-27 12:22:05 +02:00
Jesse Rosenstock
d0089aef95
Fix bit-field truncation warning message
...
Fix copy & paste bug with warning message.
struct X {
signed int a : 3;
};
struct X g = { 5 };
Before:
s.c(4): Warning: Implicit truncation from 'int' to 'int : 3' in bit-field
initializer changes value from 5 to 5
After:
s.c(4): Warning: Implicit truncation from 'int' to 'int : 3' in bit-field
initializer changes value from 5 to -3
Fixes #1268
2020-09-26 17:41:45 -04:00
Greg King
81ac28ff71
Used TAY/TYA instead of PHA/PLA when extracting a bit-field.
...
Without optimization, it saves a few CPU cycles. With optimization, it saves more cycles and a few bytes.
2020-09-22 12:47:09 -04:00
Greg King
ea95728330
Avoided an avalanche of messages from bad bit-field declarations.
...
Made cc65 replace a bad bit-field type with a good one, and always parse the field width.
Shortenned a parameter name to a spelling that's consistent with other function headers.
2020-09-22 12:47:09 -04:00
Greg King
07ea5259ac
Changed a cc65 error message to say that the sizes of bit-field types (not bit-fields) are limited.
2020-09-22 12:47:08 -04:00
Greg King
bf4b195016
Added some comments that explain where the g_branch() code generator can and can't be used.
2020-09-18 15:50:26 -04:00
acqn
de630a1245
Fixed quick hack for known registers after calling certain runtime functions,
...
and new quick hack for tosshrax.
2020-09-18 09:04:15 +02:00
acqn
079f4a99dd
Added processor state info to the OPCDesc table. However, since some opcodes are affected by the addressing mode, this info is unused in codegen/optimizer but just as quick in-code documentation/hints.
2020-09-18 09:04:15 +02:00
acqn
a7d6eb9190
Added processor flag usage/change-tracking for non-JSR/RTS code entries.
...
Some existing optimizations are impacted and need fixes in order to work correctly again.
Fixed and improved OptPrecalc. Now it respects the C/V/Z/N flags.
Fixed optimizations impacted by added support of tracking processor flags.
2020-09-18 09:04:15 +02:00
acqn
d02b12fa6c
Made local code/data labels really local to the functions where they live in.
2020-09-18 09:02:16 +02:00
acqn
86ced2bd4c
Avoided unnecessarily boosting the code label numbers with boolean AND.
2020-09-18 08:59:56 +02:00
acqn
b8ae5c28fe
Added debug output support for processor flags.
2020-09-13 13:50:35 +02:00