~rsandifo/+junk/loop-microbenchmarks

« back to all changes in this revision

Viewing changes to scripts/generate.tcl

  • Committer: Richard Sandiford
  • Date: 2011-12-30 09:28:18 UTC
  • Revision ID: richard.sandiford@linaro.org-20111230092818-52k1ieuepelmnmlz
Split out the main peak_loop into peak_loop_1 and pass the restricted pointers as arguments.  From a suggestion by Ira.

Show diffs side-by-side

added added

removed removed

Lines of Context:
142
142
    return [join $text "\n"]
143
143
}
144
144
 
 
145
# Execute a "foreach VARS LIST BODY" loop in which the body expands STRING.
 
146
# Treat each string as a formal or actual function argument, joining them
 
147
# with ", ".
 
148
proc arg_foreach { vars list string } {
 
149
    foreach var $vars {
 
150
        upvar $var up_$var
 
151
        lappend upvars up_$var
 
152
    }
 
153
    set text [list]
 
154
    foreach $upvars $list {
 
155
        lappend text [uplevel 1 [list subst $string]]
 
156
    }
 
157
    return [join $text ", "]
 
158
}
 
159
 
145
160
# Declare that NAME is an array with element type TYPE and dimensions DIMS.
146
161
proc array_decl { type name dims } {
147
162
    set line "$type $name"
380
395
[text_foreach { type name dims start } $arrays \
381
396
     {#undef $name}]
382
397
 
383
 
void __attribute__((noinline))
384
 
peak_loop (void)
 
398
static void
 
399
peak_loop_1 ([arg_foreach { type name dims start } $arrays \
 
400
                  {[pointer_decl $type "__restrict $name" $dims]}])
385
401
{
386
 
[text_foreach { type name dims start } $arrays \
387
 
     {  [pointer_decl $type "__restrict $name" $dims] = vol_$name;}]
388
402
[text_foreach { type name value } $inputs \
389
403
     {  $type $name = vol_$name;}]
390
404
 
395
409
[text_foreach { type name value } $outputs \
396
410
     {  peak_$name = $name;}]
397
411
}
 
412
 
 
413
void __attribute__((noinline))
 
414
peak_loop (void)
 
415
{
 
416
  peak_loop_1 ([arg_foreach { type name dims start } $arrays {vol_$name}]);
 
417
}
398
418
}