Changeset 9802f4c


Ignore:
Timestamp:
Nov 21, 2019, 10:52:18 AM (5 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
71d6bd8
Parents:
f2d1335 (diff), 665f432 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into new-ast

Files:
19 edited

Legend:

Unmodified
Added
Removed
  • Jenkinsfile_disabled

    rf2d1335 r9802f4c  
    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 {} +'
    104109        }
    105110}
  • automake/missing

    • Property mode changed from 100644 to 120000
    rf2d1335 r9802f4c  
    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
    5 exit 0
     1/usr/share/automake-1.15/missing
  • libcfa/src/bits/defs.hfa

    rf2d1335 r9802f4c  
    4747#define OPTIONAL_THREAD __attribute__((weak))
    4848#endif
     49
     50static 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

    rf2d1335 r9802f4c  
    4646        #ifdef __cforall
    4747        extern "Cforall" {
    48                 extern thread_local struct KernelThreadData {
     48                extern __attribute__((aligned(128))) 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;
    5759                } kernelTLS __attribute__ ((tls_model ( "initial-exec" )));
    5860        }
  • libcfa/src/concurrency/kernel.cfa

    rf2d1335 r9802f4c  
    133133        NULL,
    134134        NULL,
    135         { 1, false, false }
     135        { 1, false, false },
     136        6u //this should be seeded better but due to a bug calling rdtsc doesn't work
    136137};
    137138
     
    260261//Main of the processor contexts
    261262void 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
    262267        processor * this = runner.proc;
    263268        verify(this);
  • libcfa/src/concurrency/kernel_private.hfa

    rf2d1335 r9802f4c  
    101101#define KERNEL_STORAGE(T,X) static char storage_##X[sizeof(T)]
    102102
     103static 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
    103110
    104111void doregister( struct cluster & cltr );
  • src/AST/Convert.cpp

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

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

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

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

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

    rf2d1335 r9802f4c  
    24522452
    24532453        indexerScopedAccept( node->result    , *this );
    2454         maybeAccept_impl   ( node->inout     , *this );
    24552454        maybeAccept_impl   ( node->constraint, *this );
    24562455        maybeAccept_impl   ( node->operand   , *this );
     
    24642463
    24652464        indexerScopedAccept( node->result    , *this );
    2466         maybeAccept_impl   ( node->inout     , *this );
    24672465        maybeAccept_impl   ( node->constraint, *this );
    24682466        maybeAccept_impl   ( node->operand   , *this );
     
    24772475        indexerScopedMutate( node->env       , *this );
    24782476        indexerScopedMutate( node->result    , *this );
    2479         maybeMutate_impl   ( node->inout     , *this );
    24802477        maybeMutate_impl   ( node->constraint, *this );
    24812478        maybeMutate_impl   ( node->operand   , *this );
  • src/Parser/parser.yy

    rf2d1335 r9802f4c  
    14231423asm_operand:                                                                                    // GCC
    14241424        string_literal '(' constant_expression ')'
    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 ) ) ); }
     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 ) ) ); }
    14281428        ;
    14291429
  • src/ResolvExpr/Resolver.cc

    rf2d1335 r9802f4c  
    485485                visit_children = false;
    486486                findVoidExpression( asmExpr->operand, indexer );
    487                 if ( asmExpr->get_inout() ) {
    488                         findVoidExpression( asmExpr->inout, indexer );
    489                 } // if
    490487        }
    491488
     
    13651362                asmExpr = ast::mutate_field(
    13661363                        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                 }
    13721364
    13731365                return asmExpr;
  • src/SynTree/Expression.cc

    rf2d1335 r9802f4c  
    527527}
    528528
    529 AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( maybeClone( other.inout ) ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}
     529AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( 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 ) inout->print( os, indent+1 );
     534        if ( !inout.empty() ) os <<  "[" << inout << "] ";
    535535        if ( constraint ) constraint->print( os, indent+1 );
    536536        if ( operand ) operand->print( os, indent+1 );
  • src/SynTree/Expression.h

    rf2d1335 r9802f4c  
    575575class AsmExpr : public Expression {
    576576  public:
    577         Expression * inout;
     577        std::string inout;
    578578        Expression * constraint;
    579579        Expression * operand;
    580580
    581         AsmExpr( Expression * inout, Expression * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
     581        AsmExpr( const std::string * _inout, Expression * constraint, Expression * operand ) : inout( _inout ? *_inout : "" ), constraint( constraint ), operand( operand ) { delete _inout; }
    582582        AsmExpr( const AsmExpr & other );
    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; }
     583        virtual ~AsmExpr() { delete constraint; delete operand; };
    593584
    594585        virtual AsmExpr * clone() const override { return new AsmExpr( * this ); }
  • src/main.cc

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

    rf2d1335 r9802f4c  
    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 ) : [ _X3srci_2 ] "r" ( _X3dsti_2 ) : "r0" );
     14    asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ src ] "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

    rf2d1335 r9802f4c  
    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 ) : [ _X3srci_2 ] "r" ( _X3dsti_2 ) : "r0" );
     14    asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ src ] "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.