From a7859f7e4541f2750df52ec725563d378ab7ddbb Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sat, 31 Mar 2012 12:27:33 -0700 Subject: X86: Fix address size handling so real mode works properly. Virtual (pre-segmentation) addresses are truncated based on address size, and any non-64 bit linear address is truncated to 32 bits. This means that real mode addresses aren't truncated down to 16 bits after their segment bases are added in. --- src/arch/x86/isa/microops/ldstop.isa | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/arch/x86/isa') diff --git a/src/arch/x86/isa/microops/ldstop.isa b/src/arch/x86/isa/microops/ldstop.isa index 8bcf55c99..75519f417 100644 --- a/src/arch/x86/isa/microops/ldstop.isa +++ b/src/arch/x86/isa/microops/ldstop.isa @@ -361,7 +361,7 @@ let {{ exec_output = "" calculateEA = ''' - EA = bits(SegBase + scale * Index + Base + disp, addressSize * 8 - 1, 0); + EA = SegBase + bits(scale * Index + Base + disp, addressSize * 8 - 1, 0); ''' def defineMicroLoadOp(mnemonic, code, bigCode='', -- cgit v1.2.3