unsigned int ext_s (unsigned int val ,unsigned int hi_bit){
int i ;
unsigned int r = 0 ;
unsigned int flag_bit;
flag_bit = (val & (1<<hi_bit) )?1:0;
for(r=0,i = 31;i>hi_bit;i--){
if (flag_bit) r |= 1 << i ;
else r &= ~(1<<i) ;
}
for(i = hi_bit;i>=0;i--){
if (val & (1<<i)) r |= 1 << i ;
else r &= ~(1<<i) ;
}
return r;
}
启动val是要扩展的数,hi_bit是要扩展的符号位。
代码用在一个RISCV的指令模拟器里,使用没有问题。