Changes in / [9802f4c:f2d1335]


Ignore:
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • Jenkinsfile_disabled

    r9802f4c rf2d1335  
    102102
    103103                echo GitLogMessage()
    104 
    105                 // This is a complete hack but it solves problems with automake thinking it needs to regenerate makefiles
    106                 // We fudged automake/missing to handle that but automake stills bakes prints inside the makefiles
    107                 // and these cause more problems.
    108                 sh 'find . -name Makefile.in -exec touch {} +'
    109104        }
    110105}
  • automake/missing

    • Property mode changed from 120000 to 100644
    r9802f4c rf2d1335  
    1 /usr/share/automake-1.15/missing
     1#! /bin/sh
     2# Tdelisle : having the Makefiles.in automatically regenerated causes problems
     3#            when using multiple versions of automake, even if only on end user machines
     4#            therefore I am disabling that feature by commenting this script
     5exit 0
  • libcfa/src/bits/defs.hfa

    r9802f4c rf2d1335  
    4747#define OPTIONAL_THREAD __attribute__((weak))
    4848#endif
    49 
    50 static inline long long rdtscl(void) {
    51     unsigned int lo, hi;
    52     __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
    53     return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
    54 }
  • libcfa/src/concurrency/invoke.h

    r9802f4c rf2d1335  
    4646        #ifdef __cforall
    4747        extern "Cforall" {
    48                 extern __attribute__((aligned(128))) thread_local struct KernelThreadData {
     48                extern thread_local struct KernelThreadData {
    4949                        struct thread_desc    * volatile this_thread;
    5050                        struct processor      * volatile this_processor;
     
    5555                                volatile bool in_progress;
    5656                        } preemption_state;
    57 
    58                         uint32_t rand_seed;
    5957                } kernelTLS __attribute__ ((tls_model ( "initial-exec" )));
    6058        }
  • libcfa/src/concurrency/kernel.cfa

    r9802f4c rf2d1335  
    133133        NULL,
    134134        NULL,
    135         { 1, false, false },
    136         6u //this should be seeded better but due to a bug calling rdtsc doesn't work
     135        { 1, false, false }
    137136};
    138137
     
    261260//Main of the processor contexts
    262261void main(processorCtx_t & runner) {
    263         // Because of a bug, we couldn't initialized the seed on construction
    264         // Do it here
    265         kernelTLS.rand_seed ^= rdtscl();
    266 
    267262        processor * this = runner.proc;
    268263        verify(this);
  • libcfa/src/concurrency/kernel_private.hfa

    r9802f4c rf2d1335  
    101101#define KERNEL_STORAGE(T,X) static char storage_##X[sizeof(T)]
    102102
    103 static inline uint32_t tls_rand() {
    104         kernelTLS.rand_seed ^= kernelTLS.rand_seed << 6;
    105         kernelTLS.rand_seed ^= kernelTLS.rand_seed >> 21;
    106         kernelTLS.rand_seed ^= kernelTLS.rand_seed << 7;
    107         return kernelTLS.rand_seed;
    108 }
    109 
    110103
    111104void doregister( struct cluster & cltr );
  • src/AST/Convert.cpp

    r9802f4c rf2d1335  
    898898                auto expr = visitBaseExpr( node,
    899899                        new AsmExpr(
    900                                 new std::string(node->inout),
     900                                get<Expression>().accept1(node->inout),
    901901                                get<Expression>().accept1(node->constraint),
    902902                                get<Expression>().accept1(node->operand)
     
    22702270                        new ast::AsmExpr(
    22712271                                old->location,
    2272                                 old->inout,
     2272                                GET_ACCEPT_1(inout, Expr),
    22732273                                GET_ACCEPT_1(constraint, Expr),
    22742274                                GET_ACCEPT_1(operand, Expr)
  • src/AST/Expr.hpp

    r9802f4c rf2d1335  
    583583class AsmExpr final : public Expr {
    584584public:
    585         std::string inout;
     585        ptr<Expr> inout;
    586586        ptr<Expr> constraint;
    587587        ptr<Expr> operand;
    588588
    589         AsmExpr( const CodeLocation & loc, const std::string & io, const Expr * con, const Expr * op )
     589        AsmExpr( const CodeLocation & loc, const Expr * io, const Expr * con, const Expr * op )
    590590        : Expr( loc ), inout( io ), constraint( con ), operand( op ) {}
    591591
  • src/AST/Pass.impl.hpp

    r9802f4c rf2d1335  
    13151315                        maybe_accept( node, &AsmExpr::result );
    13161316                }
     1317                maybe_accept( node, &AsmExpr::inout      );
    13171318                maybe_accept( node, &AsmExpr::constraint );
    13181319                maybe_accept( node, &AsmExpr::operand    );
  • src/AST/Print.cpp

    r9802f4c rf2d1335  
    10111011                os << "Asm Expression:" << endl;
    10121012                ++indent;
    1013                 if ( !node->inout.empty() ) os << "[" << node->inout << "] ";
     1013                if ( node->inout ) node->inout->accept( *this );
    10141014                if ( node->constraint ) node->constraint->accept( *this );
    10151015                if ( node->operand ) node->operand->accept( *this );
  • src/CodeGen/CodeGenerator.cc

    r9802f4c rf2d1335  
    786786
    787787        void CodeGenerator::postvisit( AsmExpr * asmExpr ) {
    788                 if ( !asmExpr->inout.empty() ) {
     788                if ( asmExpr->get_inout() ) {
    789789                        output << "[ ";
    790                         output << asmExpr->inout;
     790                        asmExpr->get_inout()->accept( *visitor );
    791791                        output << " ] ";
    792792                } // if
    793                 asmExpr->constraint->accept( *visitor );
     793                asmExpr->get_constraint()->accept( *visitor );
    794794                output << " ( ";
    795                 asmExpr->operand->accept( *visitor );
     795                asmExpr->get_operand()->accept( *visitor );
    796796                output << " )";
    797797        }
  • src/Common/PassVisitor.impl.h

    r9802f4c rf2d1335  
    24522452
    24532453        indexerScopedAccept( node->result    , *this );
     2454        maybeAccept_impl   ( node->inout     , *this );
    24542455        maybeAccept_impl   ( node->constraint, *this );
    24552456        maybeAccept_impl   ( node->operand   , *this );
     
    24632464
    24642465        indexerScopedAccept( node->result    , *this );
     2466        maybeAccept_impl   ( node->inout     , *this );
    24652467        maybeAccept_impl   ( node->constraint, *this );
    24662468        maybeAccept_impl   ( node->operand   , *this );
     
    24752477        indexerScopedMutate( node->env       , *this );
    24762478        indexerScopedMutate( node->result    , *this );
     2479        maybeMutate_impl   ( node->inout     , *this );
    24772480        maybeMutate_impl   ( node->constraint, *this );
    24782481        maybeMutate_impl   ( node->operand   , *this );
  • src/Parser/parser.yy

    r9802f4c rf2d1335  
    14231423asm_operand:                                                                                    // GCC
    14241424        string_literal '(' constant_expression ')'
    1425                 { $$ = new ExpressionNode( new AsmExpr( nullptr, $1, maybeMoveBuild< Expression >( $3 ) ) ); }
    1426         | '[' IDENTIFIER ']' string_literal '(' constant_expression ')'
    1427                 { $$ = new ExpressionNode( new AsmExpr( $2, $4, maybeMoveBuild< Expression >( $6 ) ) ); }
     1425                { $$ = new ExpressionNode( new AsmExpr( maybeMoveBuild< Expression >( (ExpressionNode *)nullptr ), $1, maybeMoveBuild< Expression >( $3 ) ) ); }
     1426        | '[' constant_expression ']' string_literal '(' constant_expression ')'
     1427                { $$ = new ExpressionNode( new AsmExpr( maybeMoveBuild< Expression >( $2 ), $4, maybeMoveBuild< Expression >( $6 ) ) ); }
    14281428        ;
    14291429
  • src/ResolvExpr/Resolver.cc

    r9802f4c rf2d1335  
    485485                visit_children = false;
    486486                findVoidExpression( asmExpr->operand, indexer );
     487                if ( asmExpr->get_inout() ) {
     488                        findVoidExpression( asmExpr->inout, indexer );
     489                } // if
    487490        }
    488491
     
    13621365                asmExpr = ast::mutate_field(
    13631366                        asmExpr, &ast::AsmExpr::operand, findVoidExpression( asmExpr->operand, symtab ) );
     1367
     1368                if ( asmExpr->inout ) {
     1369                        asmExpr = ast::mutate_field(
     1370                                asmExpr, &ast::AsmExpr::inout, findVoidExpression( asmExpr->inout, symtab ) );
     1371                }
    13641372
    13651373                return asmExpr;
  • src/SynTree/Expression.cc

    r9802f4c rf2d1335  
    527527}
    528528
    529 AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( other.inout ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}
     529AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( maybeClone( other.inout ) ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}
    530530
    531531
    532532void AsmExpr::print( std::ostream & os, Indenter indent ) const {
    533533        os << "Asm Expression: " << std::endl;
    534         if ( !inout.empty() ) os <<  "[" << inout << "] ";
     534        if ( inout ) inout->print( os, indent+1 );
    535535        if ( constraint ) constraint->print( os, indent+1 );
    536536        if ( operand ) operand->print( os, indent+1 );
  • src/SynTree/Expression.h

    r9802f4c rf2d1335  
    575575class AsmExpr : public Expression {
    576576  public:
    577         std::string inout;
     577        Expression * inout;
    578578        Expression * constraint;
    579579        Expression * operand;
    580580
    581         AsmExpr( const std::string * _inout, Expression * constraint, Expression * operand ) : inout( _inout ? *_inout : "" ), constraint( constraint ), operand( operand ) { delete _inout; }
     581        AsmExpr( Expression * inout, Expression * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    582582        AsmExpr( const AsmExpr & other );
    583         virtual ~AsmExpr() { delete constraint; delete operand; };
     583        virtual ~AsmExpr() { delete inout; delete constraint; delete operand; };
     584
     585        Expression * get_inout() const { return inout; }
     586        void set_inout( Expression * newValue ) { inout = newValue; }
     587
     588        Expression * get_constraint() const { return constraint; }
     589        void set_constraint( Expression * newValue ) { constraint = newValue; }
     590
     591        Expression * get_operand() const { return operand; }
     592        void set_operand( Expression * newValue ) { operand = newValue; }
    584593
    585594        virtual AsmExpr * clone() const override { return new AsmExpr( * this ); }
  • src/main.cc

    r9802f4c rf2d1335  
    414414
    415415
    416 static const char optstring[] = ":hlLmNnpP:S:tgwW:D:";
     416static const char optstring[] = ":hlLmNnpP:S:twW:D:";
    417417
    418418enum { PreludeDir = 128 };
  • tests/.expect/gccExtensions.x64.txt

    r9802f4c rf2d1335  
    1212    asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=" "r" ( _X3dsti_2 ) :  :  );
    1313    asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ) : "r" ( _X3srci_2 ) :  );
    14     asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ src ] "r" ( _X3dsti_2 ) : "r0" );
     14    asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ _X3srci_2 ] "r" ( _X3dsti_2 ) : "r0" );
    1515    L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" :  : "r" ( _X3srci_2 ), "r" ( (&_X3dsti_2) ) : "r5", "memory" : L1, L2 );
    1616    double _Complex _X2c1Cd_2;
  • tests/.expect/gccExtensions.x86.txt

    r9802f4c rf2d1335  
    1212    asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=" "r" ( _X3dsti_2 ) :  :  );
    1313    asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ) : "r" ( _X3srci_2 ) :  );
    14     asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ src ] "r" ( _X3dsti_2 ) : "r0" );
     14    asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ _X3srci_2 ] "r" ( _X3dsti_2 ) : "r0" );
    1515    L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" :  : "r" ( _X3srci_2 ), "r" ( (&_X3dsti_2) ) : "r5", "memory" : L1, L2 );
    1616    double _Complex _X2c1Cd_2;
Note: See TracChangeset for help on using the changeset viewer.