1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-28 19:29:53 +00:00
Commit Graph

154 Commits

Author SHA1 Message Date
Oliver Schmidt
233dd5062a Merge pull request #389 from IrgendwerA8/stringimprovements
Optimization of string functions (size & speed).
2017-04-04 15:39:37 +02:00
IrgendwerA8
1abfa98290 minor style changes 2017-03-19 20:51:54 +01:00
IrgendwerA8
0de44517ac few 6502 and some 65SC02 optimizations 2017-03-12 23:21:43 +01:00
IrgendwerA8
81115aa826 Added further optimizations and unit tests. 2017-03-05 02:09:12 +01:00
Oliver Schmidt
419eb700b5 Renamed INITBSS to INIT and INIT to ONCE.
The way we want to use the INITBSS segment - and especially the fact that it won't have the type bss on all ROM based targets - means that the name INITBSS is misleading. After all INIT is the best name from my perspective as it serves several purposes and therefore needs a rather generic name.

Unfortunately this means that the current INIT segment needs to be renamed too. Looking for a short (ideally 4 letter) name I came up with ONCE as it contains all code (and data) accessed only once during initialization.
2016-03-06 21:27:19 +01:00
Oliver Schmidt
0ee9b2e446 Changed run location of INIT segment.
So far the INIT segment was run from the later heap+stack. Now the INIT segment is run from the later BSS. The background is that so far the INIT segment was pretty small (from $80 to $180 bytes). But upcoming changes will increase the INIT segment in certain scenarios up to ~ $1000 bytes. So programs with very limited heap+stack might just not been able to move the INIT segment to its run location. But moving the INIT segment to the later BSS allows it to occupy the later BSS+heap+stack.

In order to allow that the constructors are _NOT_ allowed anymore to access the BSS. Rather they must use the DATA segment or the new INITBSS segment. The latter isn't cleared at any point so the constructors may use it to expose values to the main program. However they must make sure to always write the values as they are not pre-initialized.
2015-10-14 22:52:09 +02:00
Greg King
74c2415795 Changed literal zeroes of the style "#>0" into the style "#>$0000". 2014-09-10 19:15:07 -04:00
Greg King
f82a43b98d Fixed the comments to say where the actual Left-Hand Side and Right-Hand Side are put.
A description of positions [left, right] is appropriate more for C code than for Assembly code.  (A description of timing [first argument, second argument] is more appropriate for the way that Assembly code is written.)
2014-05-11 10:43:06 -04:00
Greg King
228b9d1718 Added a fast subroutine to multiply two signed 8-bit numbers. 2014-05-11 01:08:27 -04:00
Oliver Schmidt
5edcd639e0 Made EXTZP segment option for modules.
This allows to remove the "add empty EXTZP segement to avoid warnings"
approach.
2013-06-28 00:30:24 +02:00
Oliver Schmidt
85885001b1 Removed (pretty inconsistently used) tab chars from source code base. 2013-05-09 13:57:12 +02:00
Oliver Schmidt
008b4c4e1d Replaced whole bunch for Makefiles with a single generic Makefile.
- No complex shell logic.
- "Source file shadowing" for all targets via vpath.
- Dependency handling.
- True incremental build.
- Don't write into source directories.
- Easy cleanup by just removing 'wrk'.
2013-05-04 22:10:48 +02:00
ol.sc
7c9171ee87 Moved IRQ hooking / unhooking from startup code to constructor / destructor to avoid linking in the hooking / unhooking code (and callirq) for the majority of cc65 prorams not linking in interruptors.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5985 b7a2c559-68d2-44c3-8de9-860c34a00d81
2013-02-12 22:39:38 +00:00
uz
dc4e898abd Use the new declarations from the zeropage include file. In interrupt handlers
that call C code, we don't need to save the register bank, because the C code
will save it, when needed.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5909 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-11-04 15:23:05 +00:00
uz
7b34609930 Have the callirq module export __CALLIRQ__ and changed all config files so
this symbol is a forced import for all interruptors.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5902 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-11-03 21:59:15 +00:00
uz
6cdd8e7281 Rewrite code for arithmetic right shift.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5779 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-07-11 20:57:02 +00:00
uz
c6db670be5 Rewrite to add an entry point for shraxy that doesn't need to pass values over
the stack.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5761 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-07-06 19:57:24 +00:00
uz
db8cac9501 Comment and tab fix. No code changes.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5760 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-07-06 19:56:42 +00:00
uz
b9ffe5de13 Add another entry point to the shift left routine, that shifts A/X by Y
without going over the stack.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5742 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-06-24 22:04:00 +00:00
uz
85b25b3d22 Added an entry point to push a 32 bit long value.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5705 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-06-10 19:15:52 +00:00
uz
8087959e18 New entry point to push something pointed to by ptr1 with index in Y.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5667 b7a2c559-68d2-44c3-8de9-860c34a00d81
2012-06-01 19:19:45 +00:00
uz
3806cd472d Added new 8x16 unsigned multiplication routine.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5078 b7a2c559-68d2-44c3-8de9-860c34a00d81
2011-07-10 14:51:03 +00:00
uz
3812c5c854 Added labels for umul16x16r16 and umul16x16r16m.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5077 b7a2c559-68d2-44c3-8de9-860c34a00d81
2011-07-10 14:50:18 +00:00
uz
4a32e84639 Fixed an error in the division routine: The high byte of the wrong 16 bit
value was checked before entering the faster 16b8 division routine.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4904 b7a2c559-68d2-44c3-8de9-860c34a00d81
2011-01-11 17:08:29 +00:00
uz
c72cf88723 Comment update.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4582 b7a2c559-68d2-44c3-8de9-860c34a00d81
2010-02-04 22:29:57 +00:00
uz
c6831e936a Added --forget-inc-paths to the assembler command line to avoid problems if
more than one version of ca65 is installed on the machine (Spiro Trikaliotis).


git-svn-id: svn://svn.cc65.org/cc65/trunk@4530 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-12-18 11:58:50 +00:00
uz
5dc80c2615 Rename the 8x8 multiplication using the same scheme as for the 16x16
multiplication.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4463 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-12 15:48:11 +00:00
uz
18272c0427 Working on the division and multiplication routines.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4443 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-04 19:41:54 +00:00
uz
c200e0ec94 Added division routine. Removed C callable entry points from mul routines,
they're now in common.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4441 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-04 18:23:40 +00:00
uz
7c804513fa The upper 16 bit differ between signed and unsigned multiplication, so while
for 16x16=16, the unsigned routine can be used, regardless of signedness, this
is not true for 16x16=32.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4438 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-04 13:45:27 +00:00
uz
100c470727 Added C callable entry point for the 16x16=32 multiplication.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4435 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-03 17:43:57 +00:00
uz
0c1703f8fd Added 16*16=32 multiplication routine.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4434 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-03 13:40:03 +00:00
uz
fdc7604d8f Added separate 8x8=>16 multiplication routine as start of the multiplication
and division stuff cleanup.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4431 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-11-02 22:28:02 +00:00
uz
54a8a778eb Remove 65C02 code, because in this case, the value of Y on return is always
zero, which can be used by the optimizer.
                                         


git-svn-id: svn://svn.cc65.org/cc65/trunk@4384 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-10-20 08:25:58 +00:00
uz
6019580fb6 Removed unused code.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4191 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-09-18 17:42:44 +00:00
uz
1ea503a036 The pleasp.s module is no longer in use.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4094 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-31 12:56:54 +00:00
uz
db69c202a4 Oh well. Decided to throw away the separate implementation for leaa0sp,
because it's not used too much, may sometimes inlined and can easily be
replaced by another entry in leaaxsp.s


git-svn-id: svn://svn.cc65.org/cc65/trunk@4092 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-31 12:22:13 +00:00
uz
bf9d36a2fa Renamed leaasp.s again, this time to leaa0sp.s. Added a new module leaaxsp.s.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4091 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-31 12:15:51 +00:00
uz
a1dd468291 Renamed leasp.s to leaasp.s
git-svn-id: svn://svn.cc65.org/cc65/trunk@4090 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-31 12:10:59 +00:00
uz
c4763e9007 Special cased the division 16 by 8.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4043 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-19 14:51:16 +00:00
uz
acd1233bf2 Greatly improved multiplication routine. Optimized the generic 16x16 one and
added special cases for 8x16 and 8x8. The former is directly called by the
compiler as tosmula0 and tosumula0 resp.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4036 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-17 20:48:28 +00:00
uz
bfc8bd6d74 Added an entry point that clears the high word of rhs.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4027 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-16 16:38:52 +00:00
uz
aa7d419165 More entry points for long ops that clear the high word of the lhs.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4025 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-15 21:06:06 +00:00
uz
b1f772e9be Added additional entry points that clear the high word of the right operand.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4023 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-15 20:58:35 +00:00
uz
6a26b6e3b4 Added tosicmp0, a special entry point that clears the X register.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4005 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-08-14 22:08:28 +00:00
uz
3c168b4323 A few minor 65C02 optimizations.
git-svn-id: svn://svn.cc65.org/cc65/trunk@3944 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-02-22 15:39:19 +00:00
uz
4812feb44b git-svn-id: svn://svn.cc65.org/cc65/trunk@3863 b7a2c559-68d2-44c3-8de9-860c34a00d81 2008-08-02 22:02:54 +00:00
cuz
a47008cca0 Fixed a bug: Byte three of the remainder was overwritten by byte 4.
git-svn-id: svn://svn.cc65.org/cc65/trunk@3796 b7a2c559-68d2-44c3-8de9-860c34a00d81
2007-08-26 17:25:21 +00:00
cuz
d3ac084997 Add the ltest module to the makefile
git-svn-id: svn://svn.cc65.org/cc65/trunk@3675 b7a2c559-68d2-44c3-8de9-860c34a00d81
2005-11-28 14:55:45 +00:00
cuz
eeddbed25b File was removed but is still needed.
git-svn-id: svn://svn.cc65.org/cc65/trunk@3671 b7a2c559-68d2-44c3-8de9-860c34a00d81
2005-11-27 22:03:19 +00:00