Line 293... |
Line 293... |
ap1 = GenerateExpression(node->p[0],F_REG,8);
|
ap1 = GenerateExpression(node->p[0],F_REG,8);
|
ap2 = GenerateExpression(node->p[1],F_REG,8);
|
ap2 = GenerateExpression(node->p[1],F_REG,8);
|
ap1->mode = am_indx2;
|
ap1->mode = am_indx2;
|
ap1->sreg = ap2->preg;
|
ap1->sreg = ap2->preg;
|
ap1->offset = makeinode(en_icon,0);
|
ap1->offset = makeinode(en_icon,0);
|
|
ap1->scale = node->scale;
|
return ap1;
|
return ap1;
|
}
|
}
|
ap1 = GenerateExpression(node->p[0],F_REG | F_IMMED,8);
|
ap1 = GenerateExpression(node->p[0],F_REG | F_IMMED,8);
|
if( ap1->mode == am_immed )
|
if( ap1->mode == am_immed )
|
{
|
{
|
Line 320... |
Line 321... |
// ap3 = GetTempRegister();
|
// ap3 = GetTempRegister();
|
// GenerateTriadic(op_addu,0,ap3,ap1,ap2); /* add left to address reg */
|
// GenerateTriadic(op_addu,0,ap3,ap1,ap2); /* add left to address reg */
|
ap1->mode = am_indx2; /* make indirect */
|
ap1->mode = am_indx2; /* make indirect */
|
ap1->sreg = ap2->preg;
|
ap1->sreg = ap2->preg;
|
ap1->offset = makeinode(en_icon,0);
|
ap1->offset = makeinode(en_icon,0);
|
|
ap1->scale = node->scale;
|
// ReleaseTempRegister(ap2); /* release any temps in ap2 */
|
// ReleaseTempRegister(ap2); /* release any temps in ap2 */
|
// ReleaseTempRegister(ap1);
|
// ReleaseTempRegister(ap1);
|
return ap1; /* return indirect */
|
return ap1; /* return indirect */
|
}
|
}
|
|
|
Line 476... |
Line 478... |
* generate code to evaluate a mod operator or a divide
|
* generate code to evaluate a mod operator or a divide
|
* operator.
|
* operator.
|
*/
|
*/
|
AMODE *GenerateModDiv(ENODE *node,int flags,int size, int op)
|
AMODE *GenerateModDiv(ENODE *node,int flags,int size, int op)
|
{
|
{
|
AMODE *ap1, *ap2;
|
AMODE *ap1, *ap2, *ap3;
|
|
|
if( node->p[0]->nodetype == en_icon )
|
if( node->p[0]->nodetype == en_icon )
|
swap_nodes(node);
|
swap_nodes(node);
|
ap1 = GenerateExpression(node->p[0],F_REG,8);
|
ap1 = GenerateExpression(node->p[0],F_REG,8);
|
ap2 = GenerateExpression(node->p[1],F_REG | F_IMMED,8);
|
ap2 = GenerateExpression(node->p[1],F_REG | F_IMMED,8);
|
GenerateTriadic(op,0,ap1,ap1,ap2);
|
ap3 = GetTempRegister();
|
GenerateDiadic(op_ext,0,ap1,0);
|
GenerateTriadic(op,0,ap3,ap1,ap2);
|
MakeLegalAmode(ap1,flags,4);
|
// GenerateDiadic(op_ext,0,ap3,0);
|
|
MakeLegalAmode(ap3,flags,4);
|
|
ReleaseTempRegister(ap1);
|
ReleaseTempRegister(ap2);
|
ReleaseTempRegister(ap2);
|
return ap1;
|
return ap3;
|
}
|
}
|
|
|
/*
|
/*
|
* exchange the two operands in a node.
|
* exchange the two operands in a node.
|
*/
|
*/
|