#ifndef __SDC51_STDARG_H
#define __SDC51_STDARG_H 1
-#if defined(__ds390) || defined(__z80) || defined(__gbz80)
+#if defined(__z80) || defined(__gbz80)
+
+typedef unsigned char * va_list;
+#define va_start(list, last) list = (unsigned char *)&last + sizeof(last)
+#define va_arg(list, type) *((type *)((list += sizeof(type)) - sizeof(type)))
+
+#elif defined(__ds390)
typedef unsigned char * va_list ;
#define va_arg(marker,type) *((type *)(marker -= sizeof(type)))
for i in $(OBJ); do echo $$i >> $(LIB); done
.c.o:
- $(CC) $(CFLAGS) -c $@
+ $(CC) $(CFLAGS) -c $<
_dummy:
Again a stub - will use the std one later...
*/
+#include <stdarg.h>
#include <stdio.h>
-#define NULL 0
+/* PENDING */
+#define NULL 0
-/* A hack because I dont understand how va_arg works...
- sdcc pushes right to left with the real sizes, not cast up
- to an int.
- so printf(int, char, long)
- results in push long, push char, push int
- On the z80 the stack grows down, so the things seem to be in
- the correct order.
- */
-
-typedef char * va_list;
-#define va_start(list, last) list = (char *)&last + sizeof(last)
-#define va_arg(list, type) *(type *)list; list += sizeof(type);
-
-typedef void EMIT(char c, void *pData);
-
-
-static void _printn(unsigned u, unsigned base, char issigned, EMIT *emitter, void *pData)
+static void _printn(unsigned u, unsigned base, char issigned, void (*emitter)(), void *pData)
{
const char *_hex = "0123456789ABCDEF";
if (issigned && ((int)u < 0)) {
(*emitter)(_hex[u%base], pData);
}
-static void _printf(const char *format, EMIT *emitter, void *pData, va_list va)
+static void _printf(const char *format, void (*emitter)(), void *pData, va_list va)
{
while (*format) {
if (*format == '%') {
break;
}
case 'x':
- {
+ {
unsigned u = va_arg(va, unsigned);
_printn(u, 16, 0, emitter, pData);
break;
}
}
+void putchar(char c);
+
static void _char_emitter(char c, void *pData)
{
+ /* PENDING: Make the compiler happy. */
+ pData = 0;
+
putchar(c);
}
-void printf(const char *format, ...)
+int printf(const char *format, ...)
{
va_list va;
va_start(va, format);
_printf(format, _char_emitter, NULL, va);
+ _printf(format, _char_emitter, NULL, va);
+
+ /* PENDING: What to return? */
+ return 0;
}
SCC = $(TOPDIR)/bin/sdcc -mz80
SAS = $(TOPDIR)/bin/as-z80
-OBJ = div.o mul.o putchar.o string.o printf.o # asm_strings.o
+OBJ = div.o mul.o putchar.o printf.o # asm_strings.o string.s
LIB = z80.lib
CC = $(SCC)
AS = $(SAS)
for i in $(OBJ); do echo $$i >> $(LIB); done
.c.o:
- $(CC) $(CFLAGS) -c $@
+ $(CC) $(CFLAGS) -c $<
_dummy:
;; Originally from GBDK by Pascal Felber.
.area _CODE
-__divschar::
- push bc
+__divschar_rr_s::
+ ld hl,#2+1
+ add hl,sp
+
+ ld e,(hl)
+ dec hl
+ ld l,(hl)
+
+ ;; Fall through
+__divschar_rr_hds::
ld c,l
call .div8
ld l,c
ld h,b
- pop bc
ret
-__modschar::
- push bc
+__modschar_rr_s::
+ ld hl,#2+1
+ add hl,sp
+
+ ld e,(hl)
+ dec hl
+ ld l,(hl)
+
+ ;; Fall through
+__modschar_rr_hds::
ld c,l
call .div8
ld l,e
ld h,d
- pop bc
ret
-__divsint::
- push bc
+__divsint_rr_s::
+ ld hl,#2+3
+ add hl,sp
+
+ ld d,(hl)
+ dec hl
+ ld e,(hl)
+ dec hl
+ ld a,(hl)
+ dec hl
+ ld l,(hl)
+ ld h,a
+
+ ;; Fall through
+__divsint_rr_hds::
ld b,h
ld c,l
ld l,c
ld h,b
- pop bc
ret
-__modsint::
- push bc
+__modsint_rr_s::
+ ld hl,#2+3
+ add hl,sp
+
+ ld d,(hl)
+ dec hl
+ ld e,(hl)
+ dec hl
+ ld a,(hl)
+ dec hl
+ ld l,(hl)
+ ld h,a
+
+ ;; Fall through
+__modsint_rr_hds::
ld b,h
ld c,l
ld l,e
ld h,d
- pop bc
ret
;; Unsigned
-__divuchar::
- push de
- push bc
+__divuchar_rr_s::
+ ld hl,#2+1
+ add hl,sp
+
+ ld e,(hl)
+ dec hl
+ ld l,(hl)
+
+ ;; Fall through
+__divuchar_rr_hds::
push ix
ld ix,#0
add ix,sp
ld h,b
pop ix
- pop bc
- pop de
ret
-__moduchar::
- push de
- push bc
+__moduchar_rr_s::
+ ld hl,#2+1
+ add hl,sp
+
+ ld e,(hl)
+ dec hl
+ ld l,(hl)
+
+ ;; Fall through
+__moduchar_rr_hds::
push ix
ld ix,#0
add ix,sp
ld h,d
pop ix
- pop bc
- pop de
ret
-__divuint::
- push bc
+__divuint_rr_s::
+ ld hl,#2+3
+ add hl,sp
+
+ ld d,(hl)
+ dec hl
+ ld e,(hl)
+ dec hl
+ ld a,(hl)
+ dec hl
+ ld l,(hl)
+ ld h,a
+
+ ;; Fall through
+__divuint_rr_hds::
ld b,h
ld c,l
call .divu16
ld l,c
ld h,b
- pop bc
ret
-__moduint::
- push bc
+__moduint_rr_s::
+ ld hl,#2+3
+ add hl,sp
+
+ ld d,(hl)
+ dec hl
+ ld e,(hl)
+ dec hl
+ ld a,(hl)
+ dec hl
+ ld l,(hl)
+ ld h,a
+ ;; Fall through
+
+__moduint_rr_hds::
ld b,h
ld c,l
ld l,e
ld h,d
- pop bc
ret
.div8::
;; Originally from GBDK by Pascal Felber.
.area _CODE
-
-__mulschar::
+
+__mulschar_rr_s::
+ ld hl,#2
+ add hl,sp
+
+ ld e,(hl)
+ inc hl
+ ld l,(hl)
+
+ ;; Fall through
+__mulschar_rr_hds::
;; Need to sign extend before going in.
- push bc
ld c,l
ld a,l
jp .mul16
-__muluchar::
-__mulsint::
-__muluint::
+__muluchar_rr_s::
+__mulsint_rr_s::
+__muluint_rr_s::
+ ld hl,#2
+ add hl,sp
+
+ ld e,(hl)
+ inc hl
+ ld d,(hl)
+ inc hl
+ ld a,(hl)
+ inc hl
+ ld h,(hl)
+ ld l,a
+
+ ;; Fall through
+
+__muluchar_rr_hds::
+__mulsint_rr_hds::
+__muluint_rr_hds::
;; Parameters:
;; HL, DE (left, right irrelivent)
;; Must preserve BC
- push bc
ld b,h
ld c,l
ADD HL,BC ; Add multiplicand to product
.mend:
; HL = result
- pop bc
ret
Again a stub - will use the std one later...
*/
-#define NULL 0
+#include <stdarg.h>
+#include <stdio.h>
-/* A hack because I dont understand how va_arg works...
- sdcc pushes right to left with the real sizes, not cast up
- to an int.
- so printf(int, char, long)
- results in push long, push char, push int
- On the z80 the stack grows down, so the things seem to be in
- the correct order.
- */
+#define STATIC
-typedef char * va_list;
-#define va_start(list, last) list = (char *)&last + sizeof(last)
-#define va_arg(list, type) *(type *)list; list += sizeof(type);
+/* PENDING */
+#define NULL 0
-typedef void EMIT(char c, void *pData);
-
-
-static void _printn(unsigned u, unsigned base, char issigned, EMIT *emitter, void *pData)
+STATIC void _printn(unsigned u, unsigned base, char issigned, void (*emitter)(char, void *), void *pData)
{
const char *_hex = "0123456789ABCDEF";
if (issigned && ((int)u < 0)) {
(*emitter)(_hex[u%base], pData);
}
-static void _printf(const char *format, EMIT *emitter, void *pData, va_list va)
+STATIC void _printf(const char *format, void (*emitter)(char, void *), void *pData, va_list va)
{
while (*format) {
if (*format == '%') {
switch (*++format) {
case 'c': {
- char c = va_arg(va, char);
+ char c = (char)va_arg(va, int);
(*emitter)(c, pData);
break;
}
void putchar(char c);
-static void _char_emitter(char c, void *pData)
+STATIC void _char_emitter(char c, void *pData)
{
+ /* PENDING: Make the compiler happy. */
+ pData = 0;
+
putchar(c);
}
-void printf(const char *format, ...)
+int printf(const char *format, ...)
{
va_list va;
va_start(va, format);
_printf(format, _char_emitter, NULL, va);
- _printf(format, _char_emitter, NULL, va);
+
+ /* PENDING: What to return? */
+ return 0;
}
.area _CODE
-_putchar::
+_putchar::
+_putchar_rr_s::
+ ld hl,#2
+ add hl,sp
+
+ ld l,(hl)
+ ld a,#1
+ rst 0x08
+
+ ret
+
+_putchar_rr_dbs::
+ ld l,e
ld a,#1
rst 0x08
char *out_name; /* Asm output name for c1 mode */
int nostdlib; /* Don't use standard lib files */
int nostdinc; /* Don't use standard include files */
+ int noRegParams; /* Disable passing some parameters in registers */
int verbose; /* Show what the compiler is doing */
int shortis8bits; /* treat short like int or char */
extern char *relFiles[128];
extern char *libFiles[128];
extern int nlibFiles;
-extern int nlibPaths;
extern char *libPaths[128];
+extern int nlibPaths;
+
extern bool verboseExec ;
void parseWithComma (char **, char *);
{ 'S', NULL, &noAssemble, "Assemble only" },
{ 'W', NULL, NULL, "Pass through options to the assembler (a) or linker (l)" },
{ 'L', NULL, NULL, "Add the next field to the library search path" },
+ { 'l', NULL, NULL, "Include the given library in the link" },
{ 0, OPTION_LARGE_MODEL, NULL, "Far functions, far data" },
{ 0, OPTION_MEDIUM_MODEL, NULL, "Far functions, near data" },
{ 0, OPTION_SMALL_MODEL, NULL, "Small model (default)" },
{ 0, "--nooverlay", &options.noOverlay, NULL },
{ 0, "--main-return", &options.mainreturn, "Issue a return after main()" },
{ 0, "--no-peep", &options.nopeep, "Disable the peephole assembly file optimisation" },
+ { 0, "--no-reg-params", &options.noRegParams, "On some ports, disable passing some parameters in registers" },
{ 0, "--peep-asm", &options.asmpeep, NULL },
{ 0, "--debug", &options.debug, "Enable debugging symbol output" },
{ 'v', OPTION_VERSION, NULL, "Display sdcc's version" },
{
if (_ports[i]->magic != PORT_MAGIC)
{
- printf ("Error: port %s is incomplete.\n", _ports[i]->target);
- wassert (0);
+ wassertl (0, "Port definition structure is incomplete");
}
}
}
libPaths[nlibPaths++] = getStringArg("-L", argv, &i);
break;
+ case 'l':
+ libFiles[nlibFiles++] = getStringArg("-l", argv, &i);
+ break;
+
case 'W':
/* linker options */
if (argv[i][2] == 'l')
{
newic = newiCode (IPUSH, IC_RIGHT (ic), NULL);
newic->parmPush = 1;
- bytesPushed=getSize(type);
+ bytesPushed += getSize(type);
}
addiCodeToeBBlock (ebp, newic, ip);
newic->lineno = lineno;
{
newic = newiCode (IPUSH, IC_LEFT (ic), NULL);
newic->parmPush = 1;
- bytesPushed=getSize(type);
+ bytesPushed += getSize(type);
}
addiCodeToeBBlock (ebp, newic, ip);
newic->lineno = lineno;
}
}
+static char *
+_mangleFunctionName(char *in)
+{
+ if (port->getMangledFunctionName)
+ {
+ return port->getMangledFunctionName(in);
+ }
+ else
+ {
+ return in;
+ }
+}
+
/*-----------------------------------------------------------------*/
/* initCSupport - create functions for C support routines */
/*-----------------------------------------------------------------*/
if (tofrom)
{
sprintf (buffer, "__fs2%s%s", ssu[su], sbwd[bwd]);
- __conv[tofrom][bwd][su] = funcOfType (buffer, __multypes[bwd][su], floatType, 1, options.float_rent);
+ __conv[tofrom][bwd][su] = funcOfType (_mangleFunctionName(buffer), __multypes[bwd][su], floatType, 1, options.float_rent);
}
else
{
sprintf (buffer, "__%s%s2fs", ssu[su], sbwd[bwd]);
- __conv[tofrom][bwd][su] = funcOfType (buffer, floatType, __multypes[bwd][su], 1, options.float_rent);
+ __conv[tofrom][bwd][su] = funcOfType (_mangleFunctionName(buffer), floatType, __multypes[bwd][su], 1, options.float_rent);
}
}
}
smuldivmod[muldivmod],
ssu[su],
sbwd[bwd]);
- __muldiv[muldivmod][bwd][su] = funcOfType (buffer, __multypes[bwd][su], __multypes[bwd][su], 2, options.intlong_rent);
+ __muldiv[muldivmod][bwd][su] = funcOfType (_mangleFunctionName(buffer), __multypes[bwd][su], __multypes[bwd][su], 2, options.intlong_rent);
SPEC_NONBANKED (__muldiv[muldivmod][bwd][su]->etype) = 1;
if (bwd < port->muldiv.force_reg_param_below)
_makeRegParam (__muldiv[muldivmod][bwd][su]);
_avr_genIVT,
_avr_reset_regparm,
_avr_regparm,
+ NULL,
NULL,
FALSE,
0, /* leave lt */
+/* Generated file, DO NOT Edit! */
+/* To Make changes to rules edit */
+/* <port>/peeph.def instead. */
+"\n"
+"\n"
+"replace restart {\n"
+" xch a,%1\n"
+" xch a,%1\n"
+"} by {\n"
+" ; Peephole 2.a removed redundant xch xch\n"
+"}\n"
+"\n"
+"replace restart {\n"
+" mov %1,#0x00\n"
+" mov a,#0x00\n"
+"} by {\n"
+" ; Peephole 3.a changed mov to clr\n"
+" clr a\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace restart {\n"
+" mov %1,#0x00\n"
+" clr a\n"
+"} by {\n"
+" ; Peephole 3.b changed mov to clr\n"
+" clr a\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace restart {\n"
+" mov %1,#0x00\n"
+" mov %2,#0x00\n"
+" mov a,%3\n"
+"} by {\n"
+" ; Peephole 3.c changed mov to clr\n"
+" clr a\n"
+" mov %1,a\n"
+" mov %2,a\n"
+" mov a,%3\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov dptr,#%2\n"
+" mov a,%1\n"
+" movx @dptr,a\n"
+"} by {\n"
+" ; Peephole 100 removed redundant mov\n"
+" mov %1,a\n"
+" mov dptr,#%2\n"
+" movx @dptr,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,acc\n"
+"} by {\n"
+" ; Peephole 100.a removed redundant mov\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,%1\n"
+" movx @dptr,a\n"
+" inc dptr\n"
+" mov a,%1\n"
+" movx @dptr,a\n"
+"} by {\n"
+" ; Peephole 101 removed redundant mov\n"
+" mov a,%1\n"
+" movx @dptr,a\n"
+" inc dptr\n"
+" movx @dptr,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,%2\n"
+" ljmp %3\n"
+"%4:\n"
+" mov %1,%5\n"
+"%3:\n"
+" mov dpl,%1\n"
+"%7:\n"
+" mov sp,bp\n"
+" pop bp\n"
+"} by {\n"
+" ; Peephole 102 removed redundant mov\n"
+" mov dpl,%2\n"
+" ljmp %3\n"
+"%4:\n"
+" mov dpl,%5\n"
+"%3:\n"
+"%7:\n"
+" mov sp,bp\n"
+" pop bp\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,%2\n"
+" ljmp %3\n"
+"%4:\n"
+" mov a%1,%5\n"
+"%3:\n"
+" mov dpl,%1\n"
+"%7:\n"
+" mov sp,bp\n"
+" pop bp\n"
+"} by {\n"
+" ; Peephole 103 removed redundant mov\n"
+" mov dpl,%2\n"
+" ljmp %3\n"
+"%4:\n"
+" mov dpl,%5\n"
+"%3:\n"
+"%7:\n"
+" mov sp,bp\n"
+" pop bp\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,bp\n"
+" clr c\n"
+" add a,#0x01\n"
+" mov r%1,a\n"
+"} by {\n"
+" ; Peephole 104 optimized increment (acc not set to r%1, flags undefined)\n"
+" mov r%1,bp\n"
+" inc r%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov a,%1\n"
+"} by {\n"
+" ; Peephole 105 removed redundant mov\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" clr c\n"
+" mov a,%1\n"
+"} by {\n"
+" ; Peephole 106 removed redundant mov \n"
+" mov %1,a\n"
+" clr c\n"
+"}\n"
+"\n"
+"replace {\n"
+" ljmp %1\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 107 removed redundant ljmp\n"
+"%1:\n"
+"}\n"
+"\n"
+"replace {\n"
+" jc %1\n"
+" ljmp %5\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 108 removed ljmp by inverse jump logic\n"
+" jnc %5\n"
+"%1:\n"
+"} if labelInRange\n"
+"\n"
+"replace {\n"
+" jz %1\n"
+" ljmp %5\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 109 removed ljmp by inverse jump logic\n"
+" jnz %5\n"
+"%1:\n"
+"} if labelInRange\n"
+"\n"
+"replace {\n"
+" jnz %1\n"
+" ljmp %5\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 110 removed ljmp by inverse jump logic\n"
+" jz %5\n"
+"%1:\n"
+"} if labelInRange\n"
+"\n"
+"replace {\n"
+" jb %1,%2\n"
+" ljmp %5\n"
+"%2:\n"
+"} by {\n"
+" ; Peephole 111 removed ljmp by inverse jump logic\n"
+" jnb %1,%5\n"
+"%2:\n"
+"} if labelInRange\n"
+"\n"
+"replace {\n"
+" jnb %1,%2\n"
+" ljmp %5\n"
+"%2:\n"
+"} by {\n"
+" ; Peephole 112 removed ljmp by inverse jump logic\n"
+" jb %1,%5\n"
+"%2:\n"
+"} if labelInRange\n"
+"\n"
+"replace {\n"
+" ljmp %5\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 132 changed ljmp to sjmp\n"
+" sjmp %5\n"
+"%1:\n"
+"} if labelInRange\n"
+"\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cpl a\n"
+"%3:\n"
+" rrc a\n"
+" mov %4,c\n"
+"} by {\n"
+" ; Peephole 113 optimized misc sequence\n"
+" clr %4\n"
+" cjne %1,%2,%3\n"
+" setb %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cpl a\n"
+"%3:\n"
+" rrc a\n"
+" mov %4,c\n"
+"} by {\n"
+" ; Peephole 114 optimized misc sequence\n"
+" clr %4\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" setb %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cpl a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 115 jump optimization \n"
+" cjne %1,%2,%3\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cpl a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 116 jump optimization\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cjne %11,%12,%3\n"
+" cpl a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 117 jump optimization\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cjne %11,%12,%3\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cjne %11,%12,%3\n"
+" cjne %13,%14,%3\n"
+" cpl a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 118 jump optimization\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cjne %11,%12,%3\n"
+" cjne %13,%14,%3\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" clr a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 119 jump optimization\n"
+" cjne %1,%2,%4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" clr a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 120 jump optimization\n"
+" cjne %1,%2,%4\n"
+" cjne %10,%11,%4\n"
+"%3:\n"
+"}\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %12,%13,%3\n"
+" clr a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 121 jump optimization\n"
+" cjne %1,%2,%4\n"
+" cjne %10,%11,%4\n"
+" cjne %12,%13,%4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %12,%13,%3\n"
+" cjne %14,%15,%3\n"
+" clr a\n"
+"%3:\n"
+" jnz %4\n"
+"} by {\n"
+" ; Peephole 122 jump optimization\n"
+" cjne %1,%2,%4\n"
+" cjne %10,%11,%4\n"
+" cjne %12,%13,%4\n"
+" cjne %14,%15,%4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" clr a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 123 jump optimization\n"
+" cjne %1,%2,%3\n"
+" smp %4\n"
+"%3:\n"
+"}\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" clr a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 124 jump optimization\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" smp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %12,%13,%3\n"
+" clr a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 125 jump optimization\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %12,%13,%3\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,#0x01\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %12,%13,%3\n"
+" cjne %14,%15,%3\n"
+" clr a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 126 jump optimization\n"
+" cjne %1,%2,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %12,%13,%3\n"
+" cjne %14,%15,%3\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" push psw\n"
+" mov psw,%1\n"
+" push bp\n"
+" mov bp,%2\n"
+"%3:\n"
+" mov %2,bp\n"
+" pop bp\n"
+" pop psw\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 127 removed misc sequence\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" rlc a\n"
+" jz %1\n"
+"} by {\n"
+" ; Peephole 128 jump optimization\n"
+" jnc %1\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" rlc a\n"
+" jnz %1\n"
+"} by {\n"
+" ; Peephole 129 jump optimization\n"
+" jc %1\n"
+"}\n"
+"\n"
+"replace { \n"
+" mov r%1,@r%2\n"
+"} by {\n"
+" ; Peephole 130 changed target address mode r%1 to ar%1\n"
+" mov ar%1,@r%2\n"
+"}\n"
+"\n"
+"replace { \n"
+" mov a,%1\n"
+" subb a,#0x01\n"
+" mov %2,a\n"
+" mov %1,%2\n"
+"} by {\n"
+" ; Peephole 131 optimized decrement (not caring for c)\n"
+" dec %1 \n"
+" mov %2,%1 \n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" mov ar%3,@r%1\n"
+" inc r%3\n"
+" mov r%4,%2\n"
+" mov @r%4,ar%3\n"
+"} by {\n"
+" ; Peephole 133 removed redundant moves\n"
+" mov r%1,%2\n"
+" inc @r%1\n"
+" mov ar%3,@r%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" mov ar%3,@r%1\n"
+" dec r%3\n"
+" mov r%4,%2\n"
+" mov @r%4,ar%3\n"
+"} by {\n"
+" ; Peephole 134 removed redundant moves\n"
+" mov r%1,%2\n"
+" dec @r%1\n"
+" mov ar%3,@r%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,a\n"
+" mov a,r%2\n"
+" orl a,r%1\n"
+"} by {\n"
+" ; Peephole 135 removed redundant mov\n"
+" mov r%1,a\n"
+" orl a,r%2\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov dpl,%2\n"
+" mov dph,%3\n"
+" mov dpx,%4\n"
+" mov a,%1\n"
+"} by {\n"
+" ; Peephole 136a removed redundant moves\n"
+" mov %1,a\n"
+" mov dpl,%2\n"
+" mov dph,%3\n"
+" mov dpx,%4\n"
+"} if 24bitMode\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov dpl,%2\n"
+" mov dph,%3\n"
+" mov a,%1\n"
+"} by {\n"
+" ; Peephole 136 removed redundant moves\n"
+" mov %1,a\n"
+" mov dpl,%2\n"
+" mov dph,%3\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov b,#0x00\n"
+" mov a,%1\n"
+" cjne %2,%3,%4\n"
+" mov b,#0x01\n"
+"%4:\n"
+" mov a,b\n"
+" jz %5\n"
+"} by {\n"
+" ; Peephole 137 optimized misc jump sequence\n"
+" mov a,%1\n"
+" cjne %2,%3,%5\n"
+"%4:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov b,#0x00\n"
+" mov a,%1\n"
+" cjne %2,%3,%4\n"
+" mov b,#0x01\n"
+"%4:\n"
+" mov a,b\n"
+" jnz %5\n"
+"} by {\n"
+" ; Peephole 138 optimized misc jump sequence\n"
+" mov a,%1\n"
+" cjne %2,%3,%4\n"
+" sjmp %5\n"
+"%4:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,a\n"
+" anl ar%1,%2\n"
+" mov a,r%1\n"
+"} by {\n"
+" ; Peephole 139 removed redundant mov\n"
+" anl a,%2\n"
+" mov r%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,a\n"
+" orl ar%1,%2\n"
+" mov a,r%1\n"
+"} by {\n"
+" ; Peephole 140 removed redundant mov\n"
+" orl a,%2\n"
+" mov r%1,a }\n"
+"\n"
+"replace {\n"
+" mov r%1,a\n"
+" xrl ar%1,%2\n"
+" mov a,r%1\n"
+"} by {\n"
+" ; Peephole 141 removed redundant mov\n"
+" xrl a,%2\n"
+" mov r%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,a\n"
+" mov r%2,ar%1\n"
+" mov ar%1,@r%2\n"
+"} by {\n"
+" ; Peephole 142 removed redundant moves\n"
+" mov r%2,a\n"
+" mov ar%1,@r%2\n"
+"}\n"
+"\n"
+"replace {\n"
+" rlc a\n"
+" mov acc.0,c\n"
+"} by {\n"
+" ; Peephole 143 converted rlc to rl\n"
+" rl a\n"
+"}\n"
+"\n"
+"replace {\n"
+" rrc a\n"
+" mov acc.7,c\n"
+"} by {\n"
+" ; Peephole 144 converted rrc to rc\n"
+" rr a\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr c\n"
+" addc a,%1\n"
+"} by {\n"
+" ; Peephole 145 changed to add without carry \n"
+" add a,%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr c\n"
+" mov a,%1\n"
+" addc a,%2\n"
+"} by {\n"
+" ; Peephole 146 changed to add without carry\n"
+" mov a,%1\n"
+" add a,%2\n"
+"}\n"
+"\n"
+"replace {\n"
+" orl r%1,a\n"
+"} by {\n"
+" ; Peephole 147 changed target address mode r%1 to ar%1\n"
+" orl ar%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" anl r%1,a\n"
+"} by {\n"
+" ; Peephole 148 changed target address mode r%1 to ar%1\n"
+" anl ar%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" xrl r%1,a\n"
+"} by {\n"
+" ; Peephole 149 changed target address mode r%1 to ar%1\n"
+" xrl ar%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov dpl,%1\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 150 removed misc moves via dpl before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov dpl,%1\n"
+" mov dph,%2\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 151 removed misc moves via dph, dpl before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov dpl,%1\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 152 removed misc moves via dph, dpl before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov %3,b\n"
+" mov dpl,%1\n"
+" mov dph,%2\n"
+" mov b,%3\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 153 removed misc moves via dph, dpl, b before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov %3,b\n"
+" mov dpl,%1\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 154 removed misc moves via dph, dpl, b before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov %3,b\n"
+" mov dpl,%1\n"
+" mov dph,%2\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 155 removed misc moves via dph, dpl, b before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov %3,b\n"
+" mov %4,a\n"
+" mov dpl,%1\n"
+" mov dph,%2\n"
+" mov b,%3\n"
+" mov a,%4\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 156 removed misc moves via dph, dpl, b, a before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov %3,b\n"
+" mov %4,a\n"
+" mov dpl,%1\n"
+" mov dph,%2\n"
+"%9:\n"
+" ret\n"
+"} by {\n"
+" ; Peephole 157 removed misc moves via dph, dpl, b, a before return\n"
+"%9:\n"
+" ret\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,dpl\n"
+" mov %2,dph\n"
+" mov %3,b\n"
+" mov %4,a\n"
+" mov dpl,%1\n"
+"%9:\n"
+" ret } by {\n"
+" ; Peephole 158 removed misc moves via dph, dpl, b, a before return\n"
+"%9:\n"
+" ret }\n"
+"\n"
+"replace {\n"
+" mov %1,#%2\n"
+" xrl %1,#0x80\n"
+"} by {\n"
+" ; Peephole 159 avoided xrl during execution\n"
+" mov %1,#(%2 ^ 0x80)\n"
+"}\n"
+"\n"
+"replace {\n"
+" jnc %1\n"
+" sjmp %2\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 160 removed sjmp by inverse jump logic\n"
+" jc %2\n"
+"%1:}\n"
+"\n"
+"replace {\n"
+" jc %1\n"
+" sjmp %2\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 161 removed sjmp by inverse jump logic\n"
+" jnc %2\n"
+"%1:}\n"
+"\n"
+"replace {\n"
+" jnz %1\n"
+" sjmp %2\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 162 removed sjmp by inverse jump logic\n"
+" jz %2\n"
+"%1:}\n"
+"\n"
+"replace {\n"
+" jz %1\n"
+" sjmp %2\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 163 removed sjmp by inverse jump logic\n"
+" jnz %2\n"
+"%1:}\n"
+"\n"
+"replace {\n"
+" jnb %3,%1\n"
+" sjmp %2\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 164 removed sjmp by inverse jump logic\n"
+" jb %3,%2\n"
+"%1:\n"
+"}\n"
+"\n"
+"replace {\n"
+" jb %3,%1\n"
+" sjmp %2\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 165 removed sjmp by inverse jump logic\n"
+" jnb %3,%2\n"
+"%1:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,%2\n"
+" mov %3,%1\n"
+" mov %2,%1\n"
+"} by {\n"
+" ; Peephole 166 removed redundant mov\n"
+" mov %1,%2\n"
+" mov %3,%1 }\n"
+"\n"
+"replace {\n"
+" mov c,%1\n"
+" cpl c\n"
+" mov %1,c\n"
+"} by {\n"
+" ; Peephole 167 removed redundant bit moves (c not set to %1)\n"
+" cpl %1 }\n"
+"\n"
+"replace {\n"
+" jnb %1,%2\n"
+" sjmp %3\n"
+"%2:} by {\n"
+" ; Peephole 168 jump optimization\n"
+" jb %1,%3\n"
+"%2:}\n"
+"\n"
+"replace {\n"
+" jb %1,%2\n"
+" sjmp %3\n"
+"%2:} by {\n"
+" ; Peephole 169 jump optimization\n"
+" jnb %1,%3\n"
+"%2:}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cpl a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 170 jump optimization\n"
+" cjne %1,%2,%4\n"
+"%3:}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cpl a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 171 jump optimization\n"
+" cjne %1,%2,%4\n"
+" cjne %9,%10,%4\n"
+"%3:}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cjne %11,%12,%3\n"
+" cpl a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 172 jump optimization\n"
+" cjne %1,%2,%4\n"
+" cjne %9,%10,%4\n"
+" cjne %11,%12,%4\n"
+"%3:}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" cjne %1,%2,%3\n"
+" cjne %9,%10,%3\n"
+" cjne %11,%12,%3\n"
+" cjne %13,%14,%3\n"
+" cpl a\n"
+"%3:\n"
+" jz %4\n"
+"} by {\n"
+" ; Peephole 173 jump optimization\n"
+" cjne %1,%2,%4\n"
+" cjne %9,%10,%4\n"
+" cjne %11,%12,%4\n"
+" cjne %13,%14,%4\n"
+"%3:}\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" clr c\n"
+" mov a,r%1\n"
+" subb a,#0x01\n"
+" mov %2,a\n"
+"} by {\n"
+" ; Peephole 174 optimized decrement (acc not set to %2, flags undefined)\n"
+" mov r%1,%2\n"
+" dec %2\n"
+"}\n"
+"\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" mov a,r%1\n"
+" add a,#0x01\n"
+" mov %2,a\n"
+"} by {\n"
+" ; Peephole 175 optimized increment (acc not set to %2, flags undefined)\n"
+" mov r%1,%2\n"
+" inc %2\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,@r%2\n"
+" inc %1\n"
+" mov @r%2,%1\n"
+"} by {\n"
+" ; Peephole 176 optimized increment, removed redundant mov\n"
+" inc @r%2\n"
+" mov %1,@r%2\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,%2\n"
+" mov %2,%1\n"
+"} by {\n"
+" ; Peephole 177 removed redundant mov\n"
+" mov %1,%2\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,%1\n"
+" mov b,a\n"
+" mov a,%2\n"
+"} by {\n"
+" ; Peephole 178 removed redundant mov\n"
+" mov b,%1\n"
+" mov a,%2\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov b,#0x00\n"
+" mov a,#0x00\n"
+"} by {\n"
+" ; Peephole 179 changed mov to clr\n"
+" clr a\n"
+" mov b,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,#0x00\n"
+"} by {\n"
+" ; Peephole 180 changed mov to clr\n"
+" clr a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov dpl,#0x00\n"
+" mov dph,#0x00\n"
+" mov dpx,#0x00\n"
+"} by {\n"
+" ; Peephole 181a used 24 bit load of dptr\n"
+" mov dptr,#0x0000\n"
+"} if 24bitMode\n"
+"\n"
+"replace {\n"
+" mov dpl,#0x00\n"
+" mov dph,#0x00\n"
+"} by {\n"
+" ; Peephole 181 used 16 bit load of dptr\n"
+" mov dptr,#0x0000\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov dpl,#%1\n"
+" mov dph,#(%1 >> 8)\n"
+" mov dpx,#(%1 >> 16)\n"
+"} by {\n"
+" ; Peephole 182a used 24 bit load of dptr\n"
+" mov dptr,#%1\n"
+"} if 24bitMode\n"
+"\n"
+"replace {\n"
+" mov dpl,#%1\n"
+" mov dph,#%2\n"
+"} by {\n"
+" ; Peephole 182 used 16 bit load of dptr\n"
+" mov dptr,#(((%2)<<8) + %1)\n"
+"}\n"
+"\n"
+"replace {\n"
+" anl %1,#%2\n"
+" anl %1,#%3\n"
+"} by {\n"
+" ; Peephole 183 avoided anl during execution\n"
+" anl %1,#(%2 & %3)\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" cpl a\n"
+" mov %1,a\n"
+"} by {\n"
+" ; Peephole 184 removed redundant mov\n"
+" cpl a\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" inc %1\n"
+"} by {\n"
+" ; Peephole 185 changed order of increment (acc incremented also!)\n"
+" inc a\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" add a,#%1\n"
+" mov dpl,a\n"
+" clr a\n"
+" addc a,#(%1 >> 8)\n"
+" mov dph,a\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+" mov %2,a\n"
+" inc dptr\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+" mov %3,a\n"
+" inc dptr\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+" mov %4,a\n"
+" inc dptr\n"
+" clr a \n"
+"} by {\n"
+" ; Peephole 186.a optimized movc sequence\n"
+" mov dptr,#%1\n"
+" mov b,acc\n"
+" movc a,@a+dptr\n"
+" mov %2,a\n"
+" mov acc,b\n"
+" inc dptr \n"
+" movc a,@a+dptr\n"
+" mov %3,a\n"
+" mov acc,b\n"
+" inc dptr\n"
+" mov %4,a\n"
+" mov acc,b\n"
+" inc dptr\n"
+"}\n"
+"\n"
+"replace {\n"
+" add a,#%1\n"
+" mov dpl,a\n"
+" clr a\n"
+" addc a,#(%1 >> 8)\n"
+" mov dph,a\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+" mov %2,a\n"
+" inc dptr\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+" mov %3,a\n"
+" inc dptr\n"
+" clr a\n"
+"} by {\n"
+" ; Peephole 186.b optimized movc sequence\n"
+" mov dptr,#%1\n"
+" mov b,acc\n"
+" movc a,@a+dptr\n"
+" mov %2,a\n"
+" mov acc,b\n"
+" inc dptr \n"
+" movc a,@a+dptr\n"
+" mov %3,a\n"
+" mov acc,b\n"
+" inc dptr \n"
+"}\n"
+"\n"
+"replace {\n"
+" add a,#%1\n"
+" mov dpl,a\n"
+" clr a\n"
+" addc a,#(%1 >> 8)\n"
+" mov dph,a\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+" mov %2,a\n"
+" inc dptr\n"
+" clr a\n"
+"} by {\n"
+" ; Peephole 186.c optimized movc sequence\n"
+" mov dptr,#%1\n"
+" mov b,acc\n"
+" movc a,@a+dptr\n"
+" mov %2,a\n"
+" mov acc,b\n"
+" inc dptr\n"
+"}\n"
+"\n"
+"replace {\n"
+" add a,#%1\n"
+" mov dpl,a\n"
+" clr a\n"
+" addc a,#(%1 >> 8)\n"
+" mov dph,a\n"
+" clr a\n"
+" movc a,@a+dptr\n"
+"} by {\n"
+" ; Peephole 186 optimized movc sequence\n"
+" mov dptr,#%1\n"
+" movc a,@a+dptr\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" anl ar%1,#%3\n"
+" mov a,r%1\n"
+"} by {\n"
+" ; Peephole 187 used a instead of ar%1 for anl\n"
+" mov a,%2\n"
+" anl a,#%3\n"
+" mov r%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov dptr,%2\n"
+" movc a,@a+dptr\n"
+" mov %1,a\n"
+"} by {\n"
+" ; Peephole 188 removed redundant mov\n"
+" mov dptr,%2\n"
+" movc a,@a+dptr\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" anl a,#0x0f\n"
+" mov %1,a\n"
+" mov a,#0x0f\n"
+" anl a,%1\n"
+"} by {\n"
+" ; Peephole 189 removed redundant mov and anl\n"
+" anl a,#0x0f\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,%1\n"
+" lcall __gptrput\n"
+" mov a,%1\n"
+"} by {\n"
+" ; Peephole 190 removed redundant mov\n"
+" mov a,%1\n"
+" lcall __gptrput\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov dpl,%2\n"
+" mov dph,%3\n"
+" mov b,%4\n"
+" mov a,%1\n"
+"} by {\n"
+" ; Peephole 191 removed redundant mov\n"
+" mov %1,a\n"
+" mov dpl,%2\n"
+" mov dph,%3\n"
+" mov b,%4\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,a\n"
+" mov @r%2,ar%1\n"
+"} by {\n"
+" ; Peephole 192 used a instead of ar%1 as source\n"
+" mov r%1,a\n"
+" mov @r%2,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" jnz %3\n"
+" mov a,%4\n"
+" jnz %3\n"
+" mov a,%9\n"
+" jnz %3\n"
+" mov a,%12\n"
+" cjne %13,%14,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 193.a optimized misc jump sequence\n"
+" jnz %8\n"
+" mov a,%4\n"
+" jnz %8\n"
+" mov a,%9\n"
+" jnz %8\n"
+" mov a,%12\n"
+" cjne %13,%14,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" mov a,%4\n"
+" cjne %5,%6,%3\n"
+" mov a,%9\n"
+" cjne %10,%11,%3\n"
+" mov a,%12\n"
+" cjne %13,%14,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 193 optimized misc jump sequence\n"
+" cjne %1,%2,%8\n"
+" mov a,%4\n"
+" cjne %5,%6,%8\n"
+" mov a,%9\n"
+" cjne %10,%11,%8\n"
+" mov a,%12\n"
+" cjne %13,%14,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" cjne %5,%6,%3\n"
+" cjne %10,%11,%3\n"
+" cjne %13,%14,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 194 optimized misc jump sequence\n"
+" cjne %1,%2,%8\n"
+" cjne %5,%6,%8\n"
+" cjne %10,%11,%8\n"
+" cjne %13,%14,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" jnz %3\n"
+" mov a,%4\n"
+" jnz %3\n"
+" mov a,%9\n"
+" cjne %10,%11,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 195.a optimized misc jump sequence\n"
+" jnz %8\n"
+" mov a,%4\n"
+" jnz %8\n"
+" mov a,%9\n"
+" cjne %10,%11,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" mov a,%4\n"
+" cjne %5,%6,%3\n"
+" mov a,%9\n"
+" cjne %10,%11,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 195 optimized misc jump sequence\n"
+" cjne %1,%2,%8\n"
+" mov a,%4\n"
+" cjne %5,%6,%8\n"
+" mov a,%9\n"
+" cjne %10,%11,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" cjne %5,%6,%3\n"
+" cjne %10,%11,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 196 optimized misc jump sequence\n"
+" cjne %1,%2,%8\n"
+" cjne %5,%6,%8\n"
+" cjne %10,%11,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" jnz %3\n"
+" mov a,%4\n"
+" cjne %5,%6,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8 \n"
+"} by {\n"
+" ; Peephole 197.a optimized misc jump sequence\n"
+" jnz %8\n"
+" mov a,%4\n"
+" cjne %5,%6,%8\n"
+" sjmp %7\n"
+"%3: \n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" mov a,%4\n"
+" cjne %5,%6,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 197 optimized misc jump sequence\n"
+" cjne %1,%2,%8\n"
+" mov a,%4\n"
+" cjne %5,%6,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" cjne %5,%6,%3\n"
+" sjmp %7\n"
+"%3:\n"
+" sjmp %8\n"
+"} by {\n"
+" ; Peephole 198 optimized misc jump sequence\n"
+" cjne %1,%2,%8\n"
+" cjne %5,%6,%8\n"
+" sjmp %7\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" cjne %1,%2,%3\n"
+" sjmp %4\n"
+"%3:\n"
+" sjmp %5\n"
+"} by {\n"
+" ; Peephole 199 optimized misc jump sequence\n"
+" cjne %1,%2,%5\n"
+" sjmp %4\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" sjmp %1\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 200 removed redundant sjmp\n"
+"%1:\n"
+"}\n"
+"\n"
+"replace {\n"
+" sjmp %1\n"
+"%2:\n"
+"%1:\n"
+"} by {\n"
+" ; Peephole 201 removed redundant sjmp\n"
+"%2:\n"
+"%1:\n"
+"}\n"
+"\n"
+"replace {\n"
+" push acc\n"
+" mov dptr,%1\n"
+" pop acc\n"
+"} by {\n"
+" ; Peephole 202 removed redundant push pop\n"
+" mov dptr,%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,_spx\n"
+" lcall %2\n"
+" mov r%1,_spx\n"
+"} by {\n"
+" ; Peephole 203 removed mov r%1,_spx\n"
+" lcall %2\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" add a,acc\n"
+" mov %1,a\n"
+"} by {\n"
+" ; Peephole 204 removed redundant mov\n"
+" add a,acc\n"
+" mov %1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" djnz %1,%2\n"
+" sjmp %3\n"
+"%2:\n"
+" sjmp %4\n"
+"%3:\n"
+"} by {\n"
+" ; Peephole 205 optimized misc jump sequence\n"
+" djnz %1,%4\n"
+"%2:\n"
+"%3:\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,%1\n"
+"} by {\n"
+" ; Peephole 206 removed redundant mov %1,%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,_bp\n"
+" add a,#0x00\n"
+" mov %1,a\n"
+"} by {\n"
+" ; Peephole 207 removed zero add (acc not set to %1, flags undefined)\n"
+" mov %1,_bp\n"
+"}\n"
+"\n"
+"replace {\n"
+" push acc\n"
+" mov r%1,_bp\n"
+" pop acc\n"
+"} by {\n"
+" ; Peephole 208 removed redundant push pop\n"
+" mov r%1,_bp\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov a,_bp\n"
+" add a,#0x00\n"
+" inc a\n"
+" mov %1,a\n"
+"} by {\n"
+" ; Peephole 209 optimized increment (acc not set to %1, flags undefined)\n"
+" mov %1,_bp\n"
+" inc %1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov dptr,#((((%1 >> 16)) <<16) + (((%1 >> 8)) <<8) + %1)\n"
+"} by {\n"
+" ; Peephole 210a simplified expression\n"
+" mov dptr,#%1\n"
+"} if 24bitMode\n"
+"\n"
+"replace {\n"
+" mov dptr,#((((%1 >> 8)) <<8) + %1)\n"
+"} by {\n"
+" ; Peephole 210 simplified expression\n"
+" mov dptr,#%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" push %1\n"
+" pop %1\n"
+"} by {\n"
+" ; Peephole 211 removed redundant push %1 pop %1 \n"
+"} \n"
+"\n"
+"replace {\n"
+" mov a,_bp\n"
+" add a,#0x01\n"
+" mov r%1,a\n"
+"} by {\n"
+" ; Peephole 212 reduced add sequence to inc\n"
+" mov r%1,_bp\n"
+" inc r%1\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,#(( %2 >> 8 ) ^ 0x80)\n"
+"} by { \n"
+" mov %1,#(%2 >> 8)\n"
+" xrl %1,#0x80\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,#(( %2 + %3 >> 8 ) ^ 0x80)\n"
+"} by { \n"
+" mov %1,#((%2 + %3) >> 8)\n"
+" xrl %1,#0x80\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" mov a,%2\n"
+" add a,%1\n"
+"} by {\n"
+" ; Peephole 214 reduced some extra movs\n"
+" mov %1,a\n"
+" add a,%2 \n"
+"} if operandsNotSame\n"
+"\n"
+"replace {\n"
+" mov %1,a\n"
+" add a,%2\n"
+" mov %1,a\n"
+"} by {\n"
+" ; Peephole 215 removed some movs\n"
+" add a,%2\n"
+" mov %1,a\n"
+"} if operandsNotSame\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" clr a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+" dec r%1\n"
+" mov @r%1,a\n"
+"} by {\n"
+" ; Peephole 216 simplified clear (2bytes)\n"
+" mov r%1,%2\n"
+" clr a\n"
+" mov @r%1,a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" clr a\n"
+" inc r%1\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+" dec r%1\n"
+" mov @r%1,a\n"
+" dec r%1\n"
+" mov @r%1,a\n"
+"} by {\n"
+" ; Peephole 217 simplified clear (3bytes)\n"
+" mov r%1,%2\n"
+" clr a\n"
+" mov @r%1,a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" mov r%1,%2\n"
+" clr a\n"
+" inc r%1\n"
+" inc r%1\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+" dec r%1\n"
+" mov @r%1,a\n"
+" dec r%1\n"
+" mov @r%1,a\n"
+" dec r%1\n"
+" mov @r%1,a\n"
+"} by {\n"
+" ; Peephole 218 simplified clear (4bytes)\n"
+" mov r%1,%2\n"
+" clr a\n"
+" mov @r%1,a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+" inc r%1\n"
+" mov @r%1,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" movx @dptr,a\n"
+" mov dptr,%1\n"
+" clr a\n"
+" movx @dptr,a\n"
+"} by {\n"
+" ; Peephole 219 removed redundant clear\n"
+" clr a\n"
+" movx @dptr,a\n"
+" mov dptr,%1\n"
+" movx @dptr,a\n"
+"}\n"
+"\n"
+"replace {\n"
+" clr a\n"
+" movx @dptr,a\n"
+" mov dptr,%1\n"
+" movx @dptr,a\n"
+" mov dptr,%2\n"
+" clr a\n"
+" movx @dptr,a\n"
+"} by {\n"
+" ; Peephole 219a removed redundant clear\n"
+" clr a\n"
+" movx @dptr,a\n"
+" mov dptr,%1\n"
+" movx @dptr,a\n"
+" mov dptr,%2\n"
+" movx @dptr,a\n"
+"}\n"
_ds390_reset_regparm,
_ds390_regparm,
NULL,
+ NULL,
FALSE,
0, /* leave lt */
0, /* leave gt */
_i186_reset_regparm,
_i186_regparm,
NULL,
+ NULL,
FALSE,
0, /* leave lt */
0, /* leave gt */
_tlcs900h_reset_regparm,
_tlcs900h_regparm,
NULL,
+ NULL,
FALSE,
0, /* leave lt */
0, /* leave gt */
_mcs51_reset_regparm,
_mcs51_regparm,
NULL,
+ NULL,
FALSE,
0, /* leave lt */
0, /* leave gt */
_pic14_reset_regparm,
_pic14_regparm,
NULL,
+ NULL,
FALSE,
0, /* leave lt */
0, /* leave gt */
*/
int (*process_pragma) (const char *sz);
+ /** Mangles a support function name to reflect the calling model.
+ */
+ char *(*getMangledFunctionName) (char *szOrginial);
+
/** If TRUE, then tprintf and !dw will be used for some initalisers
*/
bool use_dw_for_init;
bool deInUse, bcInUse;
bool deSending;
bool bcInRet = FALSE, deInRet = FALSE;
- bitVect *rInUse = bitVectCplAnd (bitVectCopy (ic->rMask), ic->rUsed);
+ bitVect *rInUse;
+
+ if (IC_RESULT(ic))
+ {
+ rInUse = bitVectCplAnd (bitVectCopy (ic->rMask), z80_rUmaskForOp (IC_RESULT(ic)));
+ }
+ else
+ {
+ /* Has no result, so in use is all of in use */
+ rInUse = ic->rMask;
+ }
deInUse = bitVectBitValue (rInUse, D_IDX) || bitVectBitValue(rInUse, E_IDX);
bcInUse = bitVectBitValue (rInUse, B_IDX) || bitVectBitValue(rInUse, C_IDX);
return _G.in_home;
}
+static int
+_opUsesPair (operand * op, iCode * ic, PAIR_ID pairId)
+{
+ int ret = 0;
+ asmop *aop;
+ symbol *sym = OP_SYMBOL (op);
+
+ if (sym->isspilt || sym->nRegs == 0)
+ return 0;
+
+ aopOp (op, ic, FALSE, FALSE);
+
+ aop = AOP (op);
+ if (aop->type == AOP_REG)
+ {
+ int i;
+ for (i = 0; i < aop->size; i++)
+ {
+ if (pairId == PAIR_DE)
+ {
+ emit2 ("; name %s", aop->aopu.aop_reg[i]->name);
+ if (!strcmp (aop->aopu.aop_reg[i]->name, "e"))
+ ret++;
+ if (!strcmp (aop->aopu.aop_reg[i]->name, "d"))
+ ret++;
+ }
+ else if (pairId == PAIR_BC)
+ {
+ emit2 ("; name %s", aop->aopu.aop_reg[i]->name);
+ if (!strcmp (aop->aopu.aop_reg[i]->name, "c"))
+ ret++;
+ if (!strcmp (aop->aopu.aop_reg[i]->name, "b"))
+ ret++;
+ }
+ else
+ {
+ wassert (0);
+ }
+ }
+ }
+
+ freeAsmop (IC_LEFT (ic), NULL, ic);
+ return ret;
+}
+
/** Emit the code for a call statement
*/
static void
{
iCode *sic;
int send = 0;
+ int nSend = elementsInSet(_G.sendSet);
+ bool swapped = FALSE;
int _z80_sendOrder[] = {
- PAIR_BC, PAIR_DE, PAIR_INVALID
+ PAIR_BC, PAIR_DE
};
+ if (nSend > 1) {
+ /* Check if the parameters are swapped. If so route through hl instead. */
+ wassertl (nSend == 2, "Pedantic check. Code only checks for the two send items case.");
+
+ sic = setFirstItem(_G.sendSet);
+ sic = setNextItem(_G.sendSet);
+
+ if (_opUsesPair (IC_LEFT(sic), sic, _z80_sendOrder[0])) {
+ /* The second send value is loaded from one the one that holds the first
+ send, i.e. it is overwritten. */
+ /* Cache the first in HL, and load the second from HL instead. */
+ emit2 ("ld h,%s", _pairs[_z80_sendOrder[0]].h);
+ emit2 ("ld l,%s", _pairs[_z80_sendOrder[0]].l);
+
+ swapped = TRUE;
+ }
+ }
+
for (sic = setFirstItem (_G.sendSet); sic;
sic = setNextItem (_G.sendSet))
{
size = AOP_SIZE (IC_LEFT (sic));
wassertl (size <= 2, "Tried to send a parameter that is bigger than two bytes");
wassertl (_z80_sendOrder[send] != PAIR_INVALID, "Tried to send more parameters than we have registers for");
-
- fetchPair(_z80_sendOrder[send], AOP (IC_LEFT (sic)));
+
+ // PENDING: Mild hack
+ if (swapped == TRUE && send == 1) {
+ if (size > 1) {
+ emit2 ("ld %s,h", _pairs[_z80_sendOrder[send]].h);
+ }
+ else {
+ emit2 ("ld %s,!zero", _pairs[_z80_sendOrder[send]].h);
+ }
+ emit2 ("ld %s,l", _pairs[_z80_sendOrder[send]].l);
+ }
+ else {
+ fetchPair(_z80_sendOrder[send], AOP (IC_LEFT (sic)));
+ }
send++;
freeAsmop (IC_LEFT (sic), NULL, sic);
if (ic->parmBytes)
{
int i = ic->parmBytes;
+
_G.stack.pushed -= i;
if (IS_GB)
{
return ret;
}
-static int
-_opUsesPair (operand * op, iCode * ic, PAIR_ID pairId)
-{
- int ret = 0;
- asmop *aop;
- symbol *sym = OP_SYMBOL (op);
-
- if (sym->isspilt || sym->nRegs == 0)
- return 0;
-
- aopOp (op, ic, FALSE, FALSE);
-
- aop = AOP (op);
- if (aop->type == AOP_REG)
- {
- int i;
- for (i = 0; i < aop->size; i++)
- {
- if (pairId == PAIR_DE)
- {
- emit2 ("; name %s", aop->aopu.aop_reg[i]->name);
- if (!strcmp (aop->aopu.aop_reg[i]->name, "e"))
- ret++;
- if (!strcmp (aop->aopu.aop_reg[i]->name, "d"))
- ret++;
- }
- else
- {
- wassert (0);
- }
- }
- }
-
- freeAsmop (IC_LEFT (ic), NULL, ic);
- return ret;
-}
*/
static int
_reg_parm (sym_link * l)
{
- if (regParmFlg == 2)
- return 0;
-
- regParmFlg++;
- return 1;
+ if (options.noRegParams)
+ {
+ return FALSE;
+ }
+ else
+ {
+ if (regParmFlg == 2)
+ {
+ return FALSE;
+ }
+ else
+ {
+ regParmFlg++;
+ return TRUE;
+ }
+ }
}
static bool
options.mainreturn = 1;
/* first the options part */
options.intlong_rent = 1;
-
+ options.noRegParams = 1;
/* Default code and data locations. */
options.code_loc = 0x200;
options.data_loc = 0x8000;
optimize.loopInduction = 0;
}
+/* Mangaling format:
+ _fun_policy_params
+ where:
+ policy is the function policy
+ params is the parameter format
+
+ policy format:
+ rs
+ where:
+ r is 'r' for reentrant, 's' for static functions
+ s is 'c' for callee saves, 'r' for caller saves
+ examples:
+ rr - reentrant, caller saves
+ params format:
+ A combination of register short names and s to signify stack variables.
+ examples:
+ bds - first two args appear in BC and DE, the rest on the stack
+ s - all arguments are on the stack.
+*/
+static char *
+_mangleSupportFunctionName(char *original)
+{
+ char buffer[128];
+
+ if (TARGET_IS_Z80)
+ {
+ if (options.noRegParams)
+ {
+ sprintf(buffer, "%s_rr_s", original);
+ }
+ else
+ {
+ sprintf(buffer, "%s_rr_bds", original);
+ }
+ }
+ else
+ {
+ strcpy(buffer, original);
+ }
+
+ return gc_strdup(buffer);
+}
+
static const char *
_getRegName (struct regs *reg)
{
},
/* Z80 has no native mul/div commands */
{
- 0, 2
+ 0, 0
},
"_",
_z80_init,
_reset_regparm,
_reg_parm,
_process_pragma,
+ _mangleSupportFunctionName,
TRUE,
0, /* leave lt */
0, /* leave gt */
_reset_regparm,
_reg_parm,
_process_pragma,
+ NULL,
TRUE,
0, /* leave lt */
0, /* leave gt */
"push\tix\n"
"\tld\tix,#0\n"
"\tadd\tix,sp\n"
- "\tld\tb,h\n"
- "\tld\tc,l\n"
"\tld\thl,#-%d\n"
"\tadd\thl,sp\n"
"\tld\tsp,hl\n"
- "\tld\th,b\n"
- "\tld\tl,c"
},
{ "leave",
"pop\tix\n"
return rumask;
}
+bitVect *
+z80_rUmaskForOp (operand * op)
+{
+ return rUmaskForOp (op);
+}
+
/** Returns bit vector of registers used in iCode.
*/
bitVect *
regs *regWithIdx (int);
void z80_assignRegisters (eBBlock ** ebbs, int count);
+bitVect *z80_rUmaskForOp (operand * op);
#endif
# Simple Makefile for dhrystone and sdcc
+TOPDIR = ../../..
PROC = z80
-PORT = consolez80
-CC = /home/michaelh/projects/gbdk-support/lcc/lcc
+CC = $(TOPDIR)/bin/sdcc
+
# -DNOENUM is here to make the results more predictable
-CFLAGS = -Wl-m -mz80/consolez80 -Wf--dumpall -v --prefix=/home/michaelh/projects/gbdk-current/
-CFLAGS += -DREG= -DNOSTRUCTASSIGN -DNOENUM
-LIBDIR = /home/michaelh/projects/gbdk-lib/build/
-LD = link-$(PROC)
-LDFLAGS = -v
-AS = as-$(PROC)
+CFLAGS += -DREG= -DNOSTRUCTASSIGN -DNOENUM -V -m$(PROC)
OBJ = dhry.o
-all: dhry
+all: dhry.ihx
+
+dhry.ihx: dhry.c
+ $(CC) $(CFLAGS) dhry.c
-dhry: dhry.s $(OBJ)
- -$(CC) $(CFLAGS) -o dhry.gb dhry.o
- cat dhry.ihx | ../../makebin/makebin > dhry.rom
+dhry.c: dhry.h
-dhry.s: dhry.c
- $(CC) $(CFLAGS) -S -o dhry.s dhry.c
+dhry.bin: dhry.ihx
+ cat $< | ../../makebin/makebin > $@
native:
gcc -g -O2 -DREG= -DNOSTRUCTASSIGN -DNOENUM -o dhry dhry.c
-dhry.c:
-
clean:
- rm -f *~ dhry *.o *.gb
+ rm -f *~ dhry *.o *.gb *.ihx *.rel
/** For printf */
#include <stdio.h>
-#ifdef SDCC_ds390
+#if defined(SDCC_ds390)
#include <tinibios.h>
#define clock() ClockTicks()
#define CLOCKS_PER_SEC 1000
#undef PRINT_T_STATES
#define memcpy(d,s,l) memcpyx(d,s,l)
+
+#elif defined(__z80)
+int _clock(void);
+#define clock _clock
+#define CLOCKS_PER_SEC 10
+
#else
/** For clock() */
#include <time.h>
/** Set to one to print more messages about expected values etc.
*/
-#define DEBUG 0
+#define DEBUG 1
#if DEBUG
#define DPRINTF(_a) printf _a
printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n");
printf ("\n");
#endif
- printf("Dhrystones/s = %lu\n", (unsigned long)Number_Of_Runs / (runTime/CLOCKS_PER_SEC));
+ // printf("Dhrystones/s = %lu\n", (unsigned long)Number_Of_Runs / (runTime/CLOCKS_PER_SEC));
printf("MIPS = d/s/1757 = (sigh, need floats...)\n");
#ifdef PRINT_T_STATES
_printTStates();