TI ARM C/C++ Optimizer                  v5.1.6
Build Number 1OE9R-KDADEMDK-RTARQ-WAR-ZAZE_V_R_W

		======File-level Analysis Summary======


extern void Arc4Process() is called from 0 sites in this file.
    It appears to be inlineable (size = 40 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	MakeByte() (1 times)

extern void Arc4SetKey() is called from 0 sites in this file.
    It appears to be inlineable (size = 71 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	<NONE>

static unsigned char MakeByte() is called from 1 sites in this file.
    It appears to be inlineable (size = 37 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	<NONE>

Inlineable function will be suppressed: MakeByte()


		======= End file-level Analysis =======


==============================================================================

extern void Arc4SetKey() is called from 0 sites in this file.
    It appears to be inlineable (size = 71 units)
    It has 4 non-trivial scope blocks nested 4 deep.
    It calls these functions:
	<NONE>

ADVICE: In function Arc4SetKey() in C:/cyassl/ctaocrypt/src/arc4.c
	in the 'for' loop with loop variable 'i' at lines C:/cyassl/ctaocrypt/src/arc4.c:56-65
	for the statement stateIndex += key[keyIndex]+a; at line 58
	and the statement ((unsigned char *)arc4)[i+2] = ((unsigned char *)arc4)[stateIndex+2]; at line 60

	Consider declaring 'key' as const unsigned char * const restrict key
	or declaring 'arc4' as  struct Arc4 * const restrict arc4
	to assert that 'key' in the address of key[keyIndex];
	and            'arc4' in the address of ((unsigned char *)arc4)[i+2];
	do not access the same object in memory.

ADVICE: In function Arc4SetKey() in C:/cyassl/ctaocrypt/src/arc4.c
	in the 'for' loop with loop variable 'i' at lines C:/cyassl/ctaocrypt/src/arc4.c:56-65
	for the statement stateIndex += key[keyIndex]+a; at line 58
	and the statement ((unsigned char *)arc4)[stateIndex+2] = a; at line 61

	Consider declaring 'key' as const unsigned char * const restrict key
	or declaring 'arc4' as  struct Arc4 * const restrict arc4
	to assert that 'key' in the address of key[keyIndex];
	and            'arc4' in the address of ((unsigned char *)arc4)[stateIndex+2];
	do not access the same object in memory.
Unrolling 'for' loop on 'i' at lines C:/cyassl/ctaocrypt/src/arc4.c:53-54 by factor 4.
Estimated speedup: 1.33x, code size increase: 2.50x (4:->10)
Unrolling 'for' loop on 'i' at lines C:/cyassl/ctaocrypt/src/arc4.c:56-65 by factor 4.
Estimated speedup: 1.19x, code size increase: 3.54x (13:->46)

There are 26 memory accesses with 316 dependences.


==============================================================================

extern void Arc4Process() is called from 0 sites in this file.
    It appears to be inlineable (size = 40 units)
    It has 3 non-trivial scope blocks nested 3 deep.
    It calls these functions:
	MakeByte() (1 times)

ADVICE: In function Arc4Process() in C:/cyassl/ctaocrypt/src/arc4.c
	in the 'while' loop with loop variable 'length' at lines C:/cyassl/ctaocrypt/src/arc4.c:96-97
	for the statement *out = *in^R$1; at line 97

	Consider declaring 'in' as const unsigned char * restrict in
	or declaring 'out' as  unsigned char * restrict out
	to assert that 'in' in the address of *in;
	and            'out' in the address of *out;
	do not access the same object in memory.
Unrolling 'while' loop on 'length' at lines C:/cyassl/ctaocrypt/src/arc4.c:96-97 by factor 2.
Estimated speedup: 1.11x, code size increase: 1.92x (13:->25)

ADVICE: In function Arc4Process() in C:/cyassl/ctaocrypt/src/arc4.c
	in the 'while' loop with loop variable 'length' at lines C:/cyassl/ctaocrypt/src/arc4.c:96-97
	for the statement *out = *in^s[(a+b&0xff)]; at line 79

	Consider declaring 'in' as const unsigned char * restrict in
	or declaring 'out' as  unsigned char * restrict out
	to assert that 'in' in the address of *in;
	and            'out' in the address of *out;
	do not access the same object in memory.

ADVICE: In function Arc4Process() in C:/cyassl/ctaocrypt/src/arc4.c
	in the 'while' loop with loop variable 'length' at lines C:/cyassl/ctaocrypt/src/arc4.c:96-97
	for the statement *out = *in^s[(a+b&0xff)]; at line 79
	and the statement *out = *in^R$1; at line 97

	Consider declaring 'in' as const unsigned char * restrict in
	or declaring 'out' as  unsigned char * restrict out
	to assert that 'in' in the address of *in;
	and            'out' in the address of *out;
	do not access the same object in memory.

ADVICE: In function Arc4Process() in C:/cyassl/ctaocrypt/src/arc4.c
	in the 'while' loop with loop variable 'length' at lines C:/cyassl/ctaocrypt/src/arc4.c:96-97
	for the statement *out = *in^s[(a+b&0xff)]; at line 79
	and the statement *out = *in^R$1; at line 97

	Consider declaring 'out' as unsigned char * restrict out
	or declaring 'in' as  const unsigned char * restrict in
	to assert that 'out' in the address of *out;
	and            'in' in the address of *in;
	do not access the same object in memory.

There are 25 memory accesses with 271 dependences.


== END OF INFO OUTPUT==
