OpenCores
URL https://opencores.org/ocsvn/raptor64/raptor64/trunk

Subversion Repositories raptor64

[/] [raptor64/] [trunk/] [software/] [c64/] [source/] [Analyze.c] - Diff between revs 37 and 51

Show entire file | Details | Blame | View Log

Rev 37 Rev 51
Line 240... Line 240...
        case en_or:     case en_xor:
        case en_or:     case en_xor:
        case en_lor:    case en_land:
        case en_lor:    case en_land:
        case en_eq:     case en_ne:
        case en_eq:     case en_ne:
        case en_gt:     case en_ge:
        case en_gt:     case en_ge:
        case en_lt:     case en_le:
        case en_lt:     case en_le:
 
        case en_ugt:    case en_uge:
 
        case en_ult:    case en_ule:
        case en_asmul:  case en_asdiv:
        case en_asmul:  case en_asdiv:
        case en_asmod:  case en_aslsh:
        case en_asmod:  case en_aslsh:
                case en_asrsh:
                case en_asrsh:
                case en_asand:  case en_asxor: case en_asor:
                case en_asand:  case en_asxor: case en_asor:
                case en_cond:
                case en_cond:
Line 305... Line 307...
            case st_case:
            case st_case:
                    scan(block->s1);
                    scan(block->s1);
                    break;
                    break;
            case st_spinlock:
            case st_spinlock:
                    scan(block->s1);
                    scan(block->s1);
 
                    scan(block->s2);
                    break;
                    break;
        }
        }
        block = block->next;
        block = block->next;
    }
    }
}
}
Line 370... Line 373...
        CSE *csp;
        CSE *csp;
    ENODE *exptr;
    ENODE *exptr;
    int reg, mask, rmask;
    int reg, mask, rmask;
    AMODE *ap, *ap2;
    AMODE *ap, *ap2;
        int nn;
        int nn;
 
        int cnt;
 
 
        reg = 11;
        reg = 11;
    mask = 0;
    mask = 0;
        rmask = 0;
        rmask = 0;
    while( bsort(&olist) );         /* sort the expression list */
    while( bsort(&olist) );         /* sort the expression list */
    csp = olist;
    csp = olist;
    while( csp != NULL ) {
    while( csp != NULL ) {
        if( OptimizationDesireability(csp) < 3 )        // was < 3
        if( OptimizationDesireability(csp) < 3 )        // was < 3
            csp->reg = -1;
            csp->reg = -1;
//        else if( csp->duses > csp->uses / 8 && reg < 18 )     // was / 4
//        else if( csp->duses > csp->uses / 4 && reg < 18 )
        else if( reg < 18 )     // was / 4
        else if( reg < 18 )     // was / 4
            csp->reg = reg++;
            csp->reg = reg++;
        else
        else
            csp->reg = -1;
            csp->reg = -1;
        if( csp->reg != -1 )
        if( csp->reg != -1 )
Line 392... Line 396...
            mask = mask | (1 << csp->reg);
            mask = mask | (1 << csp->reg);
                }
                }
        csp = csp->next;
        csp = csp->next;
    }
    }
        if( mask != 0 ) {
        if( mask != 0 ) {
                if (bitsset(rmask) < 2) {
                cnt = 0;
                        for (nn = 0; nn < 32; nn++)
                GenerateTriadic(op_subui,0,makereg(30),makereg(30),make_immed(bitsset(rmask)*8));
 
                for (nn = 0; nn < 32; nn++) {
                                if (rmask & (0x80000000 >> nn)) {
                                if (rmask & (0x80000000 >> nn)) {
                                        GenerateTriadic(op_subui,0,makereg(30),makereg(30),make_immed(8));
                                GenerateTriadic(op_sw,0,makereg(nn&31),make_indexed(cnt,30),NULL);
                                        GenerateTriadic(op_sw,0,makereg(nn&31),make_indirect(30),NULL);
                                cnt+=8;
                                }
 
                }
                }
                else {
 
                        GenerateTriadic(op_subui,0,makereg(30),makereg(30),make_immed(popcnt(mask)*8));
 
            GenerateDiadic(op_sm,0,make_indirect(30),make_mask(mask),NULL);
 
                }
                }
 
                //else {
 
                //      GenerateTriadic(op_subui,0,makereg(30),makereg(30),make_immed(popcnt(mask)*8));
 
  //          GenerateDiadic(op_sm,0,make_indirect(30),make_mask(mask),NULL);
 
                //}
        }
        }
    save_mask = mask;
    save_mask = mask;
    csp = olist;
    csp = olist;
    while( csp != NULL ) {
    while( csp != NULL ) {
            if( csp->reg != -1 )
            if( csp->reg != -1 )
Line 493... Line 498...
                case en_or:     case en_xor:
                case en_or:     case en_xor:
                case en_land:   case en_lor:
                case en_land:   case en_lor:
                case en_eq:     case en_ne:
                case en_eq:     case en_ne:
                case en_lt:     case en_le:
                case en_lt:     case en_le:
                case en_gt:     case en_ge:
                case en_gt:     case en_ge:
 
                                case en_ult:    case en_ule:
 
                                case en_ugt:    case en_uge:
                case en_cond:   case en_void:
                case en_cond:   case en_void:
                case en_asadd:  case en_assub:
                case en_asadd:  case en_assub:
                case en_asmul:  case en_asdiv:
                case en_asmul:  case en_asdiv:
                case en_asor:   case en_asand:
                case en_asor:   case en_asand:
                case en_asmod:  case en_aslsh:
                case en_asmod:  case en_aslsh:

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.