@ -6653,22 +6653,27 @@ macro2 (ip)
case M_DROL_I :
{
unsigned int rot ;
char * l , * r ;
if ( imm_expr . X_op ! = O_constant )
as_bad ( _ ( " rotate count too large " ) ) ;
rot = imm_expr . X_add_number & 0x3f ;
if ( ! rot )
break ;
l = ( rot < 0x20 ) ? " dsll " : " dsll32 " ;
r = ( ( 0x40 - rot ) < 0x20 ) ? " dsrl " : " dsrl32 " ;
rot & = 0x1f ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , l ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , r ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
if ( rot = = 0 )
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " dsrl " ,
" d,w,< " , dreg , sreg , 0 ) ;
else
{
char * l , * r ;
l = ( rot < 0x20 ) ? " dsll " : " dsll32 " ;
r = ( ( 0x40 - rot ) < 0x20 ) ? " dsrl " : " dsrl32 " ;
rot & = 0x1f ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , l ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , r ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
}
}
break ;
@ -6679,14 +6684,18 @@ macro2 (ip)
if ( imm_expr . X_op ! = O_constant )
as_bad ( _ ( " rotate count too large " ) ) ;
rot = imm_expr . X_add_number & 0x1f ;
if ( ! rot )
break ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " sll " ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " srl " ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
if ( rot = = 0 )
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " srl " ,
" d,w,< " , dreg , sreg , 0 ) ;
else
{
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " sll " ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " srl " ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
}
}
break ;
@ -6715,22 +6724,27 @@ macro2 (ip)
case M_DROR_I :
{
unsigned int rot ;
char * l , * r ;
if ( imm_expr . X_op ! = O_constant )
as_bad ( _ ( " rotate count too large " ) ) ;
rot = imm_expr . X_add_number & 0x3f ;
if ( ! rot )
break ;
r = ( rot < 0x20 ) ? " dsrl " : " dsrl32 " ;
l = ( ( 0x40 - rot ) < 0x20 ) ? " dsll " : " dsll32 " ;
rot & = 0x1f ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , r ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , l ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
if ( rot = = 0 )
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " dsrl " ,
" d,w,< " , dreg , sreg , 0 ) ;
else
{
char * l , * r ;
r = ( rot < 0x20 ) ? " dsrl " : " dsrl32 " ;
l = ( ( 0x40 - rot ) < 0x20 ) ? " dsll " : " dsll32 " ;
rot & = 0x1f ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , r ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , l ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
}
}
break ;
@ -6741,14 +6755,18 @@ macro2 (ip)
if ( imm_expr . X_op ! = O_constant )
as_bad ( _ ( " rotate count too large " ) ) ;
rot = imm_expr . X_add_number & 0x1f ;
if ( ! rot )
break ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " srl " ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " sll " ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
if ( rot = = 0 )
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " srl " ,
" d,w,< " , dreg , sreg , 0 ) ;
else
{
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " srl " ,
" d,w,< " , AT , sreg , rot ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " sll " ,
" d,w,< " , dreg , sreg , ( 0x20 - rot ) & 0x1f ) ;
macro_build ( ( char * ) NULL , & icnt , ( expressionS * ) NULL , " or " ,
" d,v,t " , dreg , dreg , AT ) ;
}
}
break ;