Ignore:
Timestamp:
Aug 1, 2014, 12:04:16 PM (10 years ago)
Author:
alain
Message:

bug fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_libs/barrier.c

    r368 r375  
    4141    volatile unsigned int* pcount  = (unsigned int *)&barrier->count;
    4242    volatile unsigned int  count    = 0;  // avoid a warning
    43     asm volatile ("barrier_llsc:                     \n"
    44                   "ll     $2,     0(%1)              \n"   
    45                   "addi   $3,     $2,        -1      \n"
    46                   "sc     $3,     0(%1)              \n"
    47                   "addu   %0,     $2,        $0      \n"
    48                   "beqz   $3,     barrier_llsc       \n"
     43
     44    asm volatile( "addu   $2,     %1,        $0      \n"
     45                  "barrier_llsc:                     \n"
     46                  "ll     $8,     0($2)              \n"
     47                  "addi   $9,     $8,        -1      \n"
     48                  "sc     $9,     0($2)              \n"
     49                  "beqz   $9,     barrier_llsc       \n"
     50                  "addu   %0,     $8,        $0      \n"
    4951                  : "=r" (count)
    5052                  : "r" (pcount)
    51                   : "$3", "$2", "memory" );
     53                  : "$2", "$8", "$9", "memory" );
    5254
    5355    // the last task re-initializes count and toggle sense,
     
    6466        // input: expected sense value (expected)
    6567        volatile unsigned int* psense  = (unsigned int *)&barrier->sense;
    66         asm volatile ("barrier_sense:                   \n"
    67                       "lw    $3,   0(%0)                \n"
    68                       "bne   $3,   %1,    barrier_sense \n"
    69                       :
    70                       : "r"(psense), "r"(expected)
    71                       : "$3" );
     68        asm volatile ( "barrier_sense:                   \n"
     69                       "lw    $3,   0(%0)                \n"
     70                       "bne   $3,   %1,    barrier_sense \n"
     71                       :
     72                       : "r"(psense), "r"(expected)
     73                       : "$3" );
    7274    }
    7375
     
    309311    unsigned int   count     = 0;  // avoid a warning
    310312
    311     asm volatile( "sbt_llsc:                         \n"                   
    312                   "ll     $2,     0(%1)              \n"   
    313                   "addi   $3,     $2,        -1      \n"
    314                   "sc     $3,     0(%1)              \n"
    315                   "addu   %0,     $2,        $0      \n"
    316                   "beqz   $3,     sbt_llsc           \n"
     313    asm volatile( "addu   $2,     %1,        $0      \n"
     314                  "sbt_llsc:                         \n"
     315                  "ll     $8,     0($2)              \n"
     316                  "addi   $9,     $8,        -1      \n"
     317                  "sc     $9,     0($2)              \n"
     318                  "beqz   $9,     sbt_llsc           \n"
     319                  "addu   %0,     $8,        $0      \n"
    317320                  : "=r" (count)
    318321                  : "r" (pcount)
    319                   : "$3", "$2", "memory" );
     322                  : "$2", "$8", "$9", "memory" );
    320323
    321324    if ( count == 1 )    // last task for this level
     
    336339        // input: expected sense value (expected)
    337340        volatile unsigned int* psense  = (unsigned int *)&node->sense;
    338         asm volatile ("sbt_sense:                       \n"
    339                       "lw    $3,   0(%0)                \n"
    340                       "bne   $3,   %1,    sbt_sense     \n"
    341                       :
    342                       : "r"(psense), "r"(expected)
    343                       : "$3" );
     341        asm volatile ( "sbt_sense:                       \n"
     342                       "lw    $3,   0(%0)                \n"
     343                       "bne   $3,   %1,    sbt_sense     \n"
     344                       :
     345                       : "r"(psense), "r"(expected)
     346                       : "$3" );
    344347    }
    345348} // end sbt_decrement()
Note: See TracChangeset for help on using the changeset viewer.