#include "../macros.h"
int foo1();
int foo2();
void bar();
int child1();
int child2();
int child3();
int child4();
int child5();
int global;
void start()
{
// Set the stack pointer
asm(" mov r13,#0x200000");
PRINT_STR("hello\n");
TRACE_INIT_NAME(701, "proc_foo");
TRACE_INIT_NAME(702, "proc_bar");
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(702);
if (global++ > 0)
global++;
bar();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo2();
TRACE_SWITCH(703);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(704);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(705);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(706);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(707);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(708);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(709);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(701);
if (global++ > 0)
global++;
foo1();
TRACE_SWITCH(710);
if (global++ > 0)
global++;
foo1();
TRACE_STOP_EMU();
}
int foo1()
{
int a = 0;
int ii;
for (ii = 0; ii < 3; ++ii) {
a += child1();
a += child2();
a += child3();
}
return a;
}
int foo2()
{
int a = 0;
int ii;
for (ii = 0; ii < 2; ++ii) {
a += child3();
a += child4();
a += child5();
}
return a;
}
#define kStride 64
void bar()
{
int a = 0;
static char mem[1000 * kStride];
int ii, jj;
for (ii = 0; ii < 4; ++ii) {
for (jj = 0; jj < 10; ++jj)
a += mem[jj * kStride];
foo1();
foo2();
}
}
int child1()
{
int a = 0;
int ii;
for (ii = 0; ii < 2; ++ii)
a += ii;
return a;
}
int child2()
{
int a = 0;
int ii;
for (ii = 0; ii < 4; ++ii)
a += ii;
return a;
}
int child3()
{
int a = 0;
int ii;
for (ii = 0; ii < 6; ++ii)
a += ii;
return a;
}
int child4()
{
int a = 0;
int ii;
for (ii = 0; ii < 8; ++ii)
a += ii;
return a;
}
int child5()
{
int a = 0;
int ii;
for (ii = 0; ii < 10; ++ii)
a += ii;
return a;
}