forked from Mirrors/opensbi
		
	lib: sbi: Fix sign-extension in sbi_misaligned_load_handler()
The misaligned load emulation does not sign-extend values correctly due to missing sign typecast in value passed to the SET_RD() macro. A very easy way to reproduce this issue is to load 16-bit value 0xff1e from a byte aligned address using LH instruction on hardware lacking misaligned load/store. This patch fixes sbi_misaligned_load_handler() for above issue. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
		@@ -128,7 +128,7 @@ int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!fp)
 | 
			
		||||
		SET_RD(insn, regs, val.data_ulong << shift >> shift);
 | 
			
		||||
		SET_RD(insn, regs, ((long)(val.data_ulong << shift)) >> shift);
 | 
			
		||||
#ifdef __riscv_flen
 | 
			
		||||
	else if (len == 8)
 | 
			
		||||
		SET_F64_RD(insn, regs, val.data_u64);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user