Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
H
hostCompiledSimulation
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Gaurav Kukreja
hostCompiledSimulation
Commits
d1325d17
Commit
d1325d17
authored
Aug 20, 2014
by
Gaurav Kukreja
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed adpcm_decoder function and added comments in cacheSimInstrument.py
Signed-off-by:
Gaurav Kukreja
<
gaurav@gauravk.in
>
parent
3f0257a7
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
111 additions
and
294 deletions
+111
-294
Makefile
examples/Makefile
+1
-1
adpcm.c
examples/adpcm/app_dir/adpcm.c
+0
-73
adpcm_IR.c
examples/adpcm/ir_c/adpcm_IR.c
+27
-176
erat_sieve_no_print.c
examples/sieve/app_dir/erat_sieve_no_print.c
+2
-2
erat_sieve_no_print_IR.c
examples/sieve/ir_c/erat_sieve_no_print_IR.c
+39
-39
cacheSimInstrument.py
instrument/cacheSimInstrument.py
+42
-3
No files found.
examples/Makefile
View file @
d1325d17
...
...
@@ -2,7 +2,7 @@ include ../Makefile.macros
include
Makefile.macros
#EXAMPLES = sieve crc32 adpcm sha basicmath
EXAMPLES
=
crc32 basicmath
EXAMPLES
=
simple
#EXAMPLES = sha sieve
#EXAMPLES = sha
STARTADR
=
0x10000214
...
...
examples/adpcm/app_dir/adpcm.c
View file @
d1325d17
...
...
@@ -167,76 +167,3 @@ void adpcm_coder(short indata[], char outdata[], int len, struct adpcm_state *st
state
->
index
=
index
;
}
void
adpcm_decoder
(
char
indata
[],
short
outdata
[],
int
len
,
struct
adpcm_state
*
state
)
{
signed
char
*
inp
;
/* Input buffer pointer */
short
*
outp
;
/* output buffer pointer */
int
sign
;
/* Current adpcm sign bit */
int
delta
;
/* Current adpcm output value */
int
step
;
/* Stepsize */
int
valpred
;
/* Predicted value */
int
vpdiff
;
/* Current change to valpred */
int
index
;
/* Current step change index */
int
inputbuffer
;
/* place to keep next 4-bit value */
int
bufferstep
;
/* toggle between inputbuffer/input */
outp
=
outdata
;
inp
=
(
signed
char
*
)
indata
;
valpred
=
state
->
valprev
;
index
=
state
->
index
;
step
=
stepsizeTable
[
index
];
bufferstep
=
0
;
for
(
;
len
>
0
;
len
--
)
{
/* Step 1 - get the delta value */
if
(
bufferstep
)
{
delta
=
inputbuffer
&
0xf
;
}
else
{
inputbuffer
=
*
inp
++
;
delta
=
(
inputbuffer
>>
4
)
&
0xf
;
}
bufferstep
=
!
bufferstep
;
/* Step 2 - Find new index value (for later) */
index
+=
indexTable
[
delta
];
if
(
index
<
0
)
index
=
0
;
if
(
index
>
88
)
index
=
88
;
/* Step 3 - Separate sign and magnitude */
sign
=
delta
&
8
;
delta
=
delta
&
7
;
/* Step 4 - Compute difference and new predicted value */
/*
** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
** in adpcm_coder.
*/
vpdiff
=
step
>>
3
;
if
(
delta
&
4
)
vpdiff
+=
step
;
if
(
delta
&
2
)
vpdiff
+=
step
>>
1
;
if
(
delta
&
1
)
vpdiff
+=
step
>>
2
;
if
(
sign
)
valpred
-=
vpdiff
;
else
valpred
+=
vpdiff
;
/* Step 5 - clamp output value */
if
(
valpred
>
32767
)
valpred
=
32767
;
else
if
(
valpred
<
-
32768
)
valpred
=
-
32768
;
/* Step 6 - Update step value */
step
=
stepsizeTable
[
index
];
/* Step 7 - Output value */
*
outp
++
=
valpred
;
}
state
->
valprev
=
valpred
;
state
->
index
=
index
;
}
examples/adpcm/ir_c/adpcm_IR.c
View file @
d1325d17
...
...
@@ -82,14 +82,14 @@ static int stepsizeTable[89] = {
void
adpcm_coder
(
short
indata
[],
char
outdata
[],
int
len
,
struct
adpcm_state
*
state
)
{
int
valpred_43
;
int
index_42
;
int
valpred_41
;
int
index_40
;
int
delta_39
;
int
step_38
;
int
step_37
;
int
valpred_36
;
uintptr_t
ivtmp_30
;
int
index_38
;
int
delta_37
;
int
step_36
;
int
step_35
;
int
valpred_34
;
uintptr_t
ivtmp_28
;
int
bufferstep
;
int
outputbuffer
;
int
index
;
...
...
@@ -115,13 +115,13 @@ adpcm_coderbb_2:
adpcm_coderbb_3:
// # PRED: 2 [91.0%] (true,exec)
outp
=
outdata
;
ivtmp_
30
=
0
;
ivtmp_
28
=
0
;
bufferstep
=
1
;
// # SUCC: 4 [100.0%] (fallthru,exec)
adpcm_coderbb_4:
// # PRED: 18 [91.0%] (true,exec) 3 [100.0%] (fallthru,exec)
diff
=
(
int
)
*
(
short
int
*
)((
uintptr_t
)
indata
+
(
uintptr_t
)
ivtmp_
30
)
-
valpred
;
diff
=
(
int
)
*
(
short
int
*
)((
uintptr_t
)
indata
+
(
uintptr_t
)
ivtmp_
28
)
-
valpred
;
if
(
diff
<
0
)
goto
adpcm_coderbb_5
;
else
...
...
@@ -164,8 +164,8 @@ adpcm_coderbb_7:
adpcm_coderbb_8:
// # PRED: 23 [100.0%] (fallthru) 7 [100.0%] (fallthru,exec)
step_3
7
=
step
>>
1
;
if
(
diff
>=
step_3
7
)
step_3
5
=
step
>>
1
;
if
(
diff
>=
step_3
5
)
goto
adpcm_coderbb_9
;
else
goto
adpcm_coderbb_10
;
...
...
@@ -174,14 +174,14 @@ adpcm_coderbb_8:
adpcm_coderbb_9:
// # PRED: 8 [50.0%] (true,exec)
delta
=
delta
|
2
;
diff
=
diff
-
step_3
7
;
vpdiff
=
vpdiff
+
step_3
7
;
diff
=
diff
-
step_3
5
;
vpdiff
=
vpdiff
+
step_3
5
;
// # SUCC: 10 [100.0%] (fallthru,exec)
adpcm_coderbb_10:
// # PRED: 8 [50.0%] (false,exec) 9 [100.0%] (fallthru,exec)
step_3
8
=
step_37
>>
1
;
if
(
diff
>=
step_3
8
)
step_3
6
=
step_35
>>
1
;
if
(
diff
>=
step_3
6
)
goto
adpcm_coderbb_11
;
else
goto
adpcm_coderbb_12
;
...
...
@@ -190,7 +190,7 @@ adpcm_coderbb_10:
adpcm_coderbb_11:
// # PRED: 10 [50.0%] (true,exec)
delta
=
delta
|
1
;
vpdiff
=
vpdiff
+
step_3
8
;
vpdiff
=
vpdiff
+
step_3
6
;
// # SUCC: 12 [100.0%] (fallthru,exec)
adpcm_coderbb_12:
...
...
@@ -203,23 +203,23 @@ adpcm_coderbb_12:
adpcm_coderbb_13:
// # PRED: 12 [50.0%] (true,exec)
valpred_3
6
=
valpred
-
vpdiff
;
valpred_3
4
=
valpred
-
vpdiff
;
goto
adpcm_coderbb_15
;
// # SUCC: 15 [100.0%] (fallthru,exec)
adpcm_coderbb_14:
// # PRED: 12 [50.0%] (false,exec)
valpred_3
6
=
vpdiff
+
valpred
;
valpred_3
4
=
vpdiff
+
valpred
;
// # SUCC: 15 [100.0%] (fallthru,exec)
adpcm_coderbb_15:
// # PRED: 13 [100.0%] (fallthru,exec) 14 [100.0%] (fallthru,exec)
valpred_4
3
=
(
valpred_36
>-
32768
)
?
valpred_36
:-
32768
;
valpred
=
(
valpred_4
3
<
32767
)
?
valpred_43
:
32767
;
delta_3
9
=
delta
|
sign
;
index_
40
=
indexTable
[
delta_39
]
+
index
;
index_4
2
=
(
index_40
>
0
)
?
index_40
:
0
;
index
=
(
index_4
2
<
88
)
?
index_42
:
88
;
valpred_4
1
=
(
valpred_34
>-
32768
)
?
valpred_34
:-
32768
;
valpred
=
(
valpred_4
1
<
32767
)
?
valpred_41
:
32767
;
delta_3
7
=
delta
|
sign
;
index_
38
=
indexTable
[
delta_37
]
+
index
;
index_4
0
=
(
index_38
>
0
)
?
index_38
:
0
;
index
=
(
index_4
0
<
88
)
?
index_40
:
88
;
step
=
stepsizeTable
[
index
];
if
(
bufferstep
!=
0
)
goto
adpcm_coderbb_16
;
...
...
@@ -229,13 +229,13 @@ adpcm_coderbb_15:
adpcm_coderbb_16:
// # PRED: 15 [50.0%] (true,exec)
outputbuffer
=
delta_3
9
<<
4
&
255
;
outputbuffer
=
delta_3
7
<<
4
&
255
;
goto
adpcm_coderbb_18
;
// # SUCC: 18 [100.0%] (fallthru,exec)
adpcm_coderbb_17:
// # PRED: 15 [50.0%] (false,exec)
*
outp
=
(
signed
char
)
delta_3
9
&
15
|
(
signed
char
)
outputbuffer
;
*
outp
=
(
signed
char
)
delta_3
7
&
15
|
(
signed
char
)
outputbuffer
;
outp
=
(
uintptr_t
)
outp
+
1
;
// # SUCC: 18 [100.0%] (fallthru,exec)
...
...
@@ -243,7 +243,7 @@ adpcm_coderbb_18:
// # PRED: 16 [100.0%] (fallthru,exec) 17 [100.0%] (fallthru,exec)
bufferstep
=
bufferstep
==
0
;
len
=
len
+
-
1
;
ivtmp_
30
=
ivtmp_30
+
2
;
ivtmp_
28
=
ivtmp_28
+
2
;
if
(
len
!=
0
)
goto
adpcm_coderbb_4
;
else
...
...
@@ -273,152 +273,3 @@ adpcm_coderbb_21:
}
void
adpcm_decoder
(
char
indata
[],
short
int
outdata
[],
int
len
,
struct
adpcm_state
*
state
)
{
int
index_86
;
int
valpred_85
;
int
delta_83
;
int
index_82
;
int
valpred_81
;
uintptr_t
ivtmp_71
;
int
bufferstep
;
int
inputbuffer
;
int
index
;
int
vpdiff
;
int
valpred
;
int
step
;
int
delta
;
signed
char
*
inp
;
adpcm_decoderbb_2:
// # PRED: ENTRY [100.0%] (fallthru,exec)
valpred_81
=
state
->
valprev
;
index
=
state
->
index
;
step
=
stepsizeTable
[
index
];
if
(
len
>
0
)
goto
adpcm_decoderbb_3
;
else
goto
adpcm_decoderbb_18
;
// # SUCC: 3 [91.0%] (true,exec) 18 [9.0%] (false,exec)
adpcm_decoderbb_3:
// # PRED: 2 [91.0%] (true,exec)
inp
=
indata
;
ivtmp_71
=
0
;
bufferstep
=
0
;
// # SUCC: 4 [100.0%] (fallthru,exec)
adpcm_decoderbb_4:
// # PRED: 17 [100.0%] (fallthru,dfs_back,exec) 3 [100.0%] (fallthru,exec)
if
(
bufferstep
!=
0
)
goto
adpcm_decoderbb_5
;
else
goto
adpcm_decoderbb_6
;
// # SUCC: 5 [50.0%] (true,exec) 6 [50.0%] (false,exec)
adpcm_decoderbb_5:
// # PRED: 4 [50.0%] (true,exec)
delta
=
inputbuffer
&
15
;
goto
adpcm_decoderbb_7
;
// # SUCC: 7 [100.0%] (fallthru,exec)
adpcm_decoderbb_6:
// # PRED: 4 [50.0%] (false,exec)
inputbuffer
=
(
int
)
*
inp
;
inp
=
(
uintptr_t
)
inp
+
1
;
delta
=
inputbuffer
>>
4
&
15
;
// # SUCC: 7 [100.0%] (fallthru,exec)
adpcm_decoderbb_7:
// # PRED: 5 [100.0%] (fallthru,exec) 6 [100.0%] (fallthru,exec)
index_82
=
indexTable
[
delta
]
+
index
;
index_86
=
(
index_82
>
0
)
?
index_82
:
0
;
index
=
(
index_86
<
88
)
?
index_86
:
88
;
delta_83
=
delta
&
7
;
vpdiff
=
step
>>
3
;
if
(
delta_83
&
4
!=
0
)
goto
adpcm_decoderbb_8
;
else
goto
adpcm_decoderbb_9
;
// # SUCC: 8 [50.0%] (true,exec) 9 [50.0%] (false,exec)
adpcm_decoderbb_8:
// # PRED: 7 [50.0%] (true,exec)
vpdiff
=
vpdiff
+
step
;
// # SUCC: 9 [100.0%] (fallthru,exec)
adpcm_decoderbb_9:
// # PRED: 7 [50.0%] (false,exec) 8 [100.0%] (fallthru,exec)
if
(
delta_83
&
2
!=
0
)
goto
adpcm_decoderbb_10
;
else
goto
adpcm_decoderbb_11
;
// # SUCC: 10 [50.0%] (true,exec) 11 [50.0%] (false,exec)
adpcm_decoderbb_10:
// # PRED: 9 [50.0%] (true,exec)
vpdiff
=
vpdiff
+
(
step
>>
1
);
// # SUCC: 11 [100.0%] (fallthru,exec)
adpcm_decoderbb_11:
// # PRED: 9 [50.0%] (false,exec) 10 [100.0%] (fallthru,exec)
if
(
delta_83
&
1
!=
0
)
goto
adpcm_decoderbb_12
;
else
goto
adpcm_decoderbb_13
;
// # SUCC: 12 [50.0%] (true,exec) 13 [50.0%] (false,exec)
adpcm_decoderbb_12:
// # PRED: 11 [50.0%] (true,exec)
vpdiff
=
vpdiff
+
(
step
>>
2
);
// # SUCC: 13 [100.0%] (fallthru,exec)
adpcm_decoderbb_13:
// # PRED: 11 [50.0%] (false,exec) 12 [100.0%] (fallthru,exec)
if
(
delta
&
8
!=
0
)
goto
adpcm_decoderbb_14
;
else
goto
adpcm_decoderbb_15
;
// # SUCC: 14 [50.0%] (true,exec) 15 [50.0%] (false,exec)
adpcm_decoderbb_14:
// # PRED: 13 [50.0%] (true,exec)
valpred
=
valpred_81
-
vpdiff
;
goto
adpcm_decoderbb_16
;
// # SUCC: 16 [100.0%] (fallthru,exec)
adpcm_decoderbb_15:
// # PRED: 13 [50.0%] (false,exec)
valpred
=
vpdiff
+
valpred_81
;
// # SUCC: 16 [100.0%] (fallthru,exec)
adpcm_decoderbb_16:
// # PRED: 14 [100.0%] (fallthru,exec) 15 [100.0%] (fallthru,exec)
valpred_85
=
(
valpred
>-
32768
)
?
valpred
:-
32768
;
valpred_81
=
(
valpred_85
<
32767
)
?
valpred_85
:
32767
;
step
=
stepsizeTable
[
index
];
*
(
short
int
*
)((
uintptr_t
)
outdata
+
(
uintptr_t
)
ivtmp_71
)
=
(
short
int
)
(
short
int
)
valpred_81
;
len
=
len
+
-
1
;
ivtmp_71
=
ivtmp_71
+
2
;
if
(
len
!=
0
)
goto
adpcm_decoderbb_17
;
else
goto
adpcm_decoderbb_18
;
// # SUCC: 17 [91.0%] (true,exec) 18 [9.0%] (false,exec)
adpcm_decoderbb_17:
// # PRED: 16 [91.0%] (true,exec)
bufferstep
=
bufferstep
==
0
;
goto
adpcm_decoderbb_4
;
// # SUCC: 4 [100.0%] (fallthru,dfs_back,exec)
adpcm_decoderbb_18:
// # PRED: 16 [9.0%] (false,exec) 2 [9.0%] (false,exec)
state
->
valprev
=
(
short
int
)
(
short
int
)
valpred_81
;
state
->
index
=
(
char
)
(
char
)
index
;
return
;
// # SUCC: EXIT [100.0%]
}
examples/sieve/app_dir/erat_sieve_no_print.c
View file @
d1325d17
...
...
@@ -9,7 +9,7 @@ struct test {
unsigned
int
k
;
}
m
=
{
1
,
1
};
void
sieve
()
void
sieve
_func
()
{
unsigned
int
sieve
[
N
];
...
...
@@ -51,6 +51,6 @@ void sieve()
int
main
(
void
)
{
sieve
();
sieve
_func
();
return
0
;
}
examples/sieve/ir_c/erat_sieve_no_print_IR.c
View file @
d1325d17
...
...
@@ -21,7 +21,7 @@ struct test {
}
m
=
{
1
,
1
};
void
sieve
()
{
void
sieve
_func
()
{
int
j_76
;
uintptr_t
ivtmp_74
;
int
i_72
;
...
...
@@ -37,137 +37,137 @@ void sieve() {
int
i
;
unsigned
int
sieve
[
500000
];
sievebb_2:
sieve
_func
bb_2:
// # PRED: ENTRY [100.0%] (fallthru,exec)
ivtmp_68
=
0
;
// # SUCC: 3 [100.0%] (fallthru,exec)
sievebb_3:
sieve
_func
bb_3:
// # PRED: 3 [99.0%] (true,exec) 2 [100.0%] (fallthru,exec)
*
(
unsigned
int
*
)((
uintptr_t
)
&
results
+
(
uintptr_t
)
ivtmp_68
)
=
0
;
*
(
unsigned
int
*
)((
uintptr_t
)
&
sieve
+
(
uintptr_t
)
ivtmp_68
)
=
1
;
ivtmp_68
=
ivtmp_68
+
4
;
if
(
ivtmp_68
!=
2000000
)
goto
sievebb_3
;
goto
sieve
_func
bb_3
;
else
goto
sievebb_17
;
goto
sieve
_func
bb_17
;
// # SUCC: 3 [99.0%] (true,exec) 17 [1.0%] (false,exec)
sievebb_17:
sieve
_func
bb_17:
// # PRED: 3 [1.0%] (false,exec)
ivtmp_49
=
6
;
ivtmp_58
=
4
;
i_72
=
2
;
// # SUCC: 4 [100.0%] (fallthru)
sievebb_4:
sieve
_func
bb_4:
// # PRED: 7 [99.0%] (true,exec) 17 [100.0%] (fallthru)
D_2263
=
(
unsigned
int
)
i_72
;
if
(
*
(
unsigned
int
*
)((
uintptr_t
)
&
sieve
+
(
uintptr_t
)
D_2263
*
4
)
!=
0
)
goto
sievebb_5
;
goto
sieve
_func
bb_5
;
else
goto
sievebb_7
;
goto
sieve
_func
bb_7
;
// # SUCC: 5 [50.0%] (true,exec) 7 [50.0%] (false,exec)
sievebb_5:
sieve
_func
bb_5:
// # PRED: 4 [50.0%] (true,exec)
j_76
=
(
int
)
ivtmp_58
;
if
(
j_76
<=
499999
)
goto
sievebb_18
;
goto
sieve
_func
bb_18
;
else
goto
sievebb_7
;
goto
sieve
_func
bb_7
;
// # SUCC: 18 [91.0%] (true,exec) 7 [9.0%] (false,exec)
sievebb_18:
sieve
_func
bb_18:
// # PRED: 5 [91.0%] (true,exec)
ivtmp_74
=
ivtmp_49
;
// # SUCC: 6 [100.0%] (fallthru)
sievebb_6:
sieve
_func
bb_6:
// # PRED: 6 [91.0%] (true,exec) 18 [100.0%] (fallthru)
sieve
[
j_76
]
=
0
;
D_2252
=
(
unsigned
int
)
j_76
+
D_2263
;
j_76
=
(
int
)
D_2252
;
ivtmp_74
=
D_2263
+
ivtmp_74
;
if
((
int
)
(
ivtmp_74
-
D_2263
)
<=
499999
)
goto
sievebb_6
;
goto
sieve
_func
bb_6
;
else
goto
sievebb_7
;
goto
sieve
_func
bb_7
;
// # SUCC: 6 [91.0%] (true,exec) 7 [9.0%] (false,exec)
sievebb_7:
sieve
_func
bb_7:
// # PRED: 4 [50.0%] (false,exec) 6 [9.0%] (false,exec) 5 [9.0%] (false,exec)
i_72
=
i_72
+
1
;
ivtmp_58
=
ivtmp_58
+
2
;
ivtmp_49
=
ivtmp_49
+
3
;
if
(
i_72
*
i_72
<=
499999
)
goto
sievebb_4
;
goto
sieve
_func
bb_4
;
else
goto
sievebb_8
;
goto
sieve
_func
bb_8
;
// # SUCC: 4 [99.0%] (true,exec) 8 [1.0%] (false,exec)
sievebb_8:
sieve
_func
bb_8:
// # PRED: 7 [1.0%] (false,exec)
j
=
2
;
i
=
0
;
// # SUCC: 9 [100.0%] (fallthru,exec)
sievebb_9:
sieve
_func
bb_9:
// # PRED: 11 [99.0%] (true,exec) 8 [100.0%] (fallthru,exec)
D_2240
=
(
unsigned
int
)
j
;
if
(
*
(
unsigned
int
*
)((
uintptr_t
)
&
sieve
+
(
uintptr_t
)
D_2240
*
4
)
!=
0
)
goto
sievebb_10
;
goto
sieve
_func
bb_10
;
else
goto
sievebb_11
;
goto
sieve
_func
bb_11
;
// # SUCC: 10 [50.0%] (true,exec) 11 [50.0%] (false,exec)
sievebb_10:
sieve
_func
bb_10:
// # PRED: 9 [50.0%] (true,exec)
results
[
i
]
=
D_2240
;
i
=
i
+
1
;
// # SUCC: 11 [100.0%] (fallthru,exec)
sievebb_11:
sieve
_func
bb_11:
// # PRED: 9 [50.0%] (false,exec) 10 [100.0%] (fallthru,exec)
j
=
j
+
1
;
if
(
j
!=
500000
)
goto
sievebb_9
;
goto
sieve
_func
bb_9
;
else
goto
sievebb_12
;
goto
sieve
_func
bb_12
;
// # SUCC: 9 [99.0%] (true,exec) 12 [1.0%] (false,exec)
sievebb_12:
sieve
_func
bb_12:
// # PRED: 11 [1.0%] (false,exec)
if
(
results
[
0
]
==
0
)
goto
sievebb_16
;
goto
sieve
_func
bb_16
;
else
goto
sievebb_13
;
goto
sieve
_func
bb_13
;
// # SUCC: 16 [4.5%] (true,exec) 13 [95.5%] (false,exec)
sievebb_13:
sieve
_func
bb_13:
// # PRED: 12 [95.5%] (false,exec)
ivtmp_36
=
(
uintptr_t
)
&
results
;
D_2230
=
ivtmp_36
+
1999996
;
// # SUCC: 14 [100.0%] (fallthru,exec)
sievebb_14:
sieve
_func
bb_14:
// # PRED: 15 [98.9%] (true,exec) 13 [100.0%] (fallthru,exec)
if
(
*
(
unsigned
int
*
)((
uintptr_t
)
ivtmp_36
+
4
)
==
0
)
goto
sievebb_16
;
goto
sieve
_func
bb_16
;
else
goto
sievebb_15
;
goto
sieve
_func
bb_15
;
// # SUCC: 16 [4.5%] (true,exec) 15 [95.5%] (false,exec)
sievebb_15:
sieve
_func
bb_15:
// # PRED: 14 [95.5%] (false,exec)
ivtmp_36
=
ivtmp_36
+
4
;
if
(
ivtmp_36
!=
D_2230
)
goto
sievebb_14
;
goto
sieve
_func
bb_14
;
else
goto
sievebb_16
;
goto
sieve
_func
bb_16
;
// # SUCC: 14 [98.9%] (true,exec) 16 [1.1%] (false,exec)
sievebb_16:
sieve
_func
bb_16:
// # PRED: 14 [4.5%] (true,exec) 15 [1.1%] (false,exec) 12 [4.5%] (true,exec)
m
.
v
=
0
;
return
;
...
...
@@ -180,7 +180,7 @@ sievebb_16:
int
main
(
void
)
{
mainbb_2:
// # PRED: ENTRY [100.0%] (fallthru,exec)
sieve
();
sieve
_func
();
return
0
;
// # SUCC: EXIT [100.0%]
...
...
instrument/cacheSimInstrument.py
View file @
d1325d17
...
...
@@ -64,6 +64,7 @@ class FunctionInitState:
self
.
name
=
name
self
.
initRegState
=
initRegState
# TODO: Probably need to change the name of this function
def
instrumentCache
(
listISCFileNames
,
listObjdumpFileNames
,
listBinaryFileNames
):
(
listISCFunctions
,
listObjdumpFunctions
)
=
match_cfg
(
listISCFileNames
,
...
...
@@ -104,6 +105,12 @@ def instrumentCache(listISCFileNames, listObjdumpFileNames, listBinaryFileNames)
logging
.
debug
(
"
\t
%
d: Instruction could not be emulated!"
%
lineNumObj
)
return
-
1
'''
Branch Instruction
- If branch is to another function, add the called function to
queue of pending functions.
- Ignore all other branch instructions.
'''
m
=
re_branchInst
.
match
(
instObj
)
if
m
is
not
None
:
branchToFunction
=
m
.
group
(
"labelFunction"
)
...
...
@@ -122,8 +129,21 @@ def instrumentCache(listISCFileNames, listObjdumpFileNames, listBinaryFileNames)
initRegState
))
continue
else
:
logging
.
error
(
"labelFunction in branch instruction could not be matched!"
)
continue
'''
Store Instruction
- Calculate the address in the store instruction.
- If the address is in Stack,
- Writing to a local variable. Look up the list of local
variables, and find which one.
- Spilling Registers. Keep a dictionary mapping address
(relative to SP) and the content of the spilled register
- If address not in stack, it could be accessing Global
Variable. Look up table of Global Variables, and if no match
found, report error.
'''
m
=
re_storeInst
.
match
(
instObj
)
if
m
is
not
None
:
for
baseRegLabel
in
[
"am2_1BaseReg"
,
...
...
@@ -138,6 +158,7 @@ def instrumentCache(listISCFileNames, listObjdumpFileNames, listBinaryFileNames)
baseReg
=
m
.
group
(
baseRegLabel
)
baseRegVal
=
armEmu
.
reg
[
baseReg
]
.
value
destReg
=
m
.
group
(
"destReg"
)
# Calculate store address based on addressing mode used.
if
m
.
group
(
"am2_2ImedOff"
)
is
not
None
:
strAdd
=
baseRegVal
+
int
(
m
.
group
(
"am2_2ImedOff"
))
elif
m
.
group
(
"am2_3OffsetReg"
)
is
not
None
:
...
...
@@ -171,6 +192,22 @@ def instrumentCache(listISCFileNames, listObjdumpFileNames, listBinaryFileNames)
logging
.
error
(
"
%
d:
%
s"
%
(
lineNumObj
,
instObj
))
continue
'''
Load Instruction
- If the base address is PC,
- PC Relative Load instruction is used for Global Variables
or Values more than 32 bit long. Check if the value
loaded matches with address of a global variable.
- If base address is not PC, calculate the address to be
be loaded from. If the address is in stack, it may be
- trying to load a local variable. Match the address to
a local variable.
- reading from a spilled register. Fetch the value of
the spilled register stored at the address.
- If the address is not in stack, it must be trying to load
content of a global variable. Match the address to a global
variable. If matching is not found, report error.
'''
m
=
re_loadInst
.
match
(
instObj
)
if
m
is
not
None
:
for
baseRegLabel
in
[
"am2_1BaseReg"
,
...
...
@@ -184,6 +221,7 @@ def instrumentCache(listISCFileNames, listObjdumpFileNames, listBinaryFileNames)
break
baseReg
=
m
.
group
(
baseRegLabel
)
destReg
=
m
.
group
(
"destReg"
)
# PC Relative Load Instruction
if
baseReg
==
"pc"
:
comment
=
m
.
group
(
"comment"
)
m_comment
=
re
.
match
(
"
\
s*([0-9a-f]*)
\
s*
\
<.*
\
>"
,
comment
)
...
...
@@ -202,6 +240,7 @@ def instrumentCache(listISCFileNames, listObjdumpFileNames, listBinaryFileNames)
continue
else
:
baseRegVal
=
armEmu
.
reg
[
baseReg
]
.
value
# Calculate load address based on addressing mode used.
if
m
.
group
(
"am2_2ImedOff"
)
is
not
None
:
ldrAdd
=
baseRegVal
+
int
(
m
.
group
(
"am2_2ImedOff"
))
elif
m
.
group
(
"am2_3OffsetReg"
)
is
not
None
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment