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

Subversion Repositories raptor64

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

Show entire file | Details | Blame | View Log

Rev 37 Rev 51
Line 29... Line 29...
#include "cglbdec.h"
#include "cglbdec.h"
 
 
 
 
AMODE *GenerateShift(ENODE *node,int flags, int size, int op)
AMODE *GenerateShift(ENODE *node,int flags, int size, int op)
{
{
        AMODE *ap1, *ap2;
        AMODE *ap1, *ap2, *ap3;
 
 
    ap1 = GenerateExpression(node->p[0],F_REG,size);
    ap1 = GenerateExpression(node->p[0],F_REG,size);
    ap2 = GenerateExpression(node->p[1],F_REG | F_IMMED,8);
    ap2 = GenerateExpression(node->p[1],F_REG | F_IMMED,8);
        switch(op) {
        switch(op) {
        case op_shru:
        case op_shru:
Line 51... Line 51...
                        case 32:        GenerateTriadic(op_sext32,0,ap1,ap1,NULL); break;
                        case 32:        GenerateTriadic(op_sext32,0,ap1,ap1,NULL); break;
                        default:        ;
                        default:        ;
                }
                }
                break;
                break;
        }
        }
 
        ap3 = GetTempRegister();
        if (ap2->mode==am_immed) {
        if (ap2->mode==am_immed) {
                switch(op)
                switch(op)
                {
                {
                case op_shl:    op = op_shli; break;
                case op_shl:    op = op_shli; break;
                case op_shr:    op = op_shri; break;
                case op_shr:    op = op_shri; break;
                case op_shru:   op = op_shrui; break;
                case op_shru:   op = op_shrui; break;
                }
                }
                GenerateTriadic(op,0,ap1,ap1,make_immed(ap2->offset->i));
                GenerateTriadic(op,0,ap3,ap1,make_immed(ap2->offset->i));
        }
        }
        else
        else
                GenerateTriadic(op,0,ap1,ap1,ap2);
                GenerateTriadic(op,0,ap3,ap1,ap2);
 
    ReleaseTempRegister(ap1);
    ReleaseTempRegister(ap2);
    ReleaseTempRegister(ap2);
    MakeLegalAmode(ap1,flags,size);
    MakeLegalAmode(ap3,flags,size);
    return ap1;
    return ap3;
}
}
 
 
 
 
/*
/*
 *      generate shift equals operators.
 *      generate shift equals operators.

powered by: WebSVN 2.1.0

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