|
|
|
|
|
Did you know?
Softools'
compiler generates 20-30% less
code than the Dynamic C compiler which results in much faster
programs. |
|
|
|
|
|
And...
Our floating point may not
be as fast as Dynamic C's, but it is more
accurate. |
|
|
|
|
|
And...
TurboTask provides
your Rabbit system with multitasking support in less than
1k of code. |
|
|
|
And...
Softools' C compiler supports
far data and far pointers for access to all of Rabbit 1MB
memory in C. |
|
|
|
|
|
|
|
|
Features
| Includes globally optimizing passes
which include more then a dozen improvements to the code, all of which
both reduce code size and speed up the program. |
| Control Cross C is a
full Standard C compiler (C90 - partial C99) which also compiles K&R legacy C code.
|
| SCRabbit Control
Cross-C generates much less code than Dynamic C and the integer and floating point math
libraries are also on par with those tools. |
| Supports far function
calls for unlimited program size. Calls through pointers are also supported for both near
and far functions. Modifier _nearcall is provided to specify to the compiler when a far
function will be called with a near call (the case when using pointers to functions).
|
| Supports 'far'
keyword and far data and pointers for full access to the full Rabbit 1MB address space for
both code and data. Automatic conversion from near to far pointers is provided when
required. Far pointers are represented as true 24- or 32-bit physical addresses allowing
manipulation and far pointer math to map to the hardware address space. C arrays and
structs can be declared up to 1MB in size if far. Far char pointers are read using fast
inline code. |
| Passes information to
the linker SLINK to ensure each C function doesn't exceed the XPC 8k window.
|
| Contains a fully
integrated 100% Standard C preprocessor. Directives supported: #asm, #define, #elif,
#else, #endasm, #endif, #error, #if, #ifdef, #ifndef, #include, #line, #pragma, and
#undef. Also supported are the 'defined' operator and the macros __DATE__, __FILE__,
__LINE__, __STDC__, __TIME__, and __SCRABBIT__. The new C99 features are also supported
except _pragma. |
| Supports unlimited
memory for compilation, including increased buffer sizes for all aspects of compiling.
|
| Define preprocessor
macros from the command line. |
| File search paths and
output path may be specified. |
| Many more warnings
for questionable code and more warnings for code which is not ANSI or standard C.
|
| Completely supports
prototypes, and the enum (8 and 16-bit sizes as needed to hold all enum values), const and
volatile keywords. Constant folding, strength reduction and operation and register
optimizations are automatically done at compile time. |
| To generate the
fastest and smallest code possible, Softools was extremely careful when choosing
instructions and addressing modes in order to generate the fastest and smallest code
possible. This includes extensive use of Rabbit 2000/3000 opcodes and addressing modes
which allow our Rabbit compiler to generate significantly less code than our Z180 C
compiler. |
| Generates fully
Flash-able and reentrant code. |
| C language extensions
are provided for writing interrupt service routines completely in C and for handling all
forms of Rabbit prefixed I/O instructions. |
| Strings and const
objects are located in a ROM segment but can be moved into the code segment.
|
| Scalars with
initializers of 0 may be grouped in their own segment and zeroed at runtime eliminating
wasted bytes of 0 in ROM. |
| Code and data may be
compiled into any pre-defined compiler segment or any user-defined segment at any time.
|
| Optionally generates
assembly output optionally including C source code as comments.
|
| Generates complete
source-level debugging information including complete type information for the WinIDE
integrated debugger. |
| Has full support for
mixing C and Assembly code. Use either #asm ... #endasm or compiler extension _asm to add
assembly code to C functions. #asm... #endasm adds assembly source as-is to the output,
and allows conditional directives and #include to customize the assembly code for specific
applications. In-line assembly code can use labels and all opcodes and addressing modes
available for the selected CPU with Control Cross-C's built in SASM assembler. Or generate
one or more lines of assembly code with the built-in compiler extension _asm. With this
extension, use C variable names and automatically generate code to load and store the
variable, eliminating stack frame details when loading a parameter or local variable.
|
| Inline _asm
expressions can optionally list registers to be used by the inline assembly code. If any
of these registers are used by SCRabbit to store expression values, they will be preserved
by SCRabbit. Otherwise, it couldn't know which registers are used by the _asm code and the
user's code had to save them whether it was needed or not. Now SCRabbit saves registers you
use only when necessary. |
| A full set of
SASMRabbit macros is provided to create C callable functions in assembly. Macros allow the
easy loading and storing of both C named parameters and assembly named local variables. A
stack frame is automatically created when locals or parameters are used. Automatically
saves compiler temporaries in registers before a function call. C and assembly functions
never have to save any registers, and only those that are used are saved by the caller.
|
| Uses full SASMRabbit
assembler allowing support of all SASMRabbit features in C including macros.
|
| The first (or only)
function argument is always passed in registers as well as the stack. A function like
toupper( ) can be efficient because the stack frame need not be referenced.
|
| Uses specific and
fast processor instructions for variable loading and storing, multiplication, division,
shifting, bit testing, setting, and clearing. |
| Char expressions
conform to ANSI int promotion rules but only when the result is not a char result.
Complete char expressions are not penalized. Warnings about potentially wasteful char
promotions to int type are issued allowing you to "fix" code either to use int
types or to cast to char to generate better non-promoting code.
|
| The old style
"always use chars" mode can be enabled to generate explicit code for the char
data type in that it will not promote to int for expression evaluation and then convert
back to char. |
| Enum can be
represented by the smallest size required to do so (unsigned char or int).
|
| The processor's
byte-specific opcodes are used wherever possible, generating smaller and faster code
sequences. |
| The char type may be
set to default to signed char or unsigned char. |
| Libraries for int,
long and float operations are extremely space and time efficient.
|
| All operations for *,
/, %, <<, >>, etc. are computed entirely in processor registers.
|
| Supplied with the
following ANSI header files and libraries: assert.h - Contains macros for diagnostics.
ctype.h - Contains prototypes for ctype function versions and fast and efficient macro
versions of: isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(),
ispunct(), isspace(), isupper(), and isxdigit(), toascii(), tolower(), and toupper().
errno.h - Contains macros for error values. float.h - Contains macros for float
characteristics. limits.h - Contains macros for integer characterostics. math.h - Contains
prototypes for floating point math functions: acos(), asin(), atan(), atan2(), ceil(),
cos(), cosh(), exp(), fabs(), floor(), fmod(), frexp(), ldexp(), log(), log10(), modf(),
pow(), sin(), sinh(), sqrt(), tan(), and tanh(). stdarg.h - Contains macros for accesing
variable argument lists: va_arg, va_end, va_start. stddef.h - Contains macros for standard
definitions. stdio.h - Contains prototypes for I/O and formatting functions: _ecvt(),
fassign(), _fcvt(), fgetc(), fgets(), _format(), fprintf(), fputc(), fputs(), fread(),
fscanf(), fwrite(), _gcvt(), getc(), gets(), printf(), putc(), puts(), scanf(), sprintf(),
sscanf(), ungetc(), vfprintf(), vprintf(), and vsprintf(). stdlib.h - Contains prototypes
and macros for general functions: abort (), abs(), atexit(), atof(), atoi(), atol(),
bsearch(), calloc(), div(), exit(), free(), abs(), ldiv(), malloc(), qsort(), rand(),
realloc(), srand(), strtod(), strtol(), strtoul(). setjmp.h - Contains prototypes for the
non-local jump functions: setjmp(), and longjmp(). string.h - Contains prototypes for
string and memory functions: memchr(), memcmp(), memcpy(), memmove(), memset(), memswap(),
strcat(), strchr(), strcmp(), strcoll(), strcpy(), strcspn(), stricmp(), stristr(),
strnicmp(), strlen(), strlwr(), strncat(), strncmp(), strncpy(), strpbrk(), strrchr(),
strspn(), strstr(), strtok(), and strxfrm(). Additionally, one or more processor specific
header files are provided depending on the version of Control Cross-C.
|
|
|
|
|