From 5772e3cadaf12cf155e6ad0cb79a3b7333d1dd10 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Tue, 13 Nov 2007 01:31:43 -0800 Subject: [PATCH] X86: Make microcode use presegmentation RIPs and the rest of m5 use post segmentation RIPS. --HG-- extra : convert_revision : d8cda7c8b9a2afb8a9d601b6d61529a96c5f87fe --- src/arch/x86/isa/microops/regop.isa | 4 ++-- src/arch/x86/isa/operands.isa | 1 + src/arch/x86/process.cc | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/arch/x86/isa/microops/regop.isa b/src/arch/x86/isa/microops/regop.isa index 58b267e0d..4ac3a9d98 100644 --- a/src/arch/x86/isa/microops/regop.isa +++ b/src/arch/x86/isa/microops/regop.isa @@ -835,7 +835,7 @@ let {{ ''' class Wrip(WrRegOp, CondRegOp): - code = 'RIP = psrc1 + sop2' + code = 'RIP = psrc1 + sop2 + CSBase' else_code="RIP = RIP;" class Br(WrRegOp, CondRegOp): @@ -846,7 +846,7 @@ let {{ code = 'ccFlagBits = psrc1 ^ op2' class Rdip(RdRegOp): - code = 'DestReg = RIP' + code = 'DestReg = RIP - CSBase' class Ruflags(RdRegOp): code = 'DestReg = ccFlagBits' diff --git a/src/arch/x86/isa/operands.isa b/src/arch/x86/isa/operands.isa index 542638edd..f50e71727 100644 --- a/src/arch/x86/isa/operands.isa +++ b/src/arch/x86/isa/operands.isa @@ -126,5 +126,6 @@ def operands {{ 'ControlSrc1': ('ControlReg', 'uqw', 'MISCREG_CR(src1)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 72), 'EferOp': ('ControlReg', 'uqw', 'MISCREG_EFER', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 73), 'CR4Op': ('ControlReg', 'uqw', 'MISCREG_CR4', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 74), + 'CSBase': ('ControlReg', 'udw', 'MISCREG_CS_BASE', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 80), 'Mem': ('Mem', 'uqw', None, ('IsMemRef', 'IsLoad', 'IsStore'), 100) }}; diff --git a/src/arch/x86/process.cc b/src/arch/x86/process.cc index c6246c76b..633b2f136 100644 --- a/src/arch/x86/process.cc +++ b/src/arch/x86/process.cc @@ -461,6 +461,8 @@ X86LiveProcess::argsInit(int intSize, int pageSize) threadContexts[0]->setIntReg(StackPointerReg, stack_min); Addr prog_entry = objFile->entryPoint(); + // There doesn't need to be any segment base added in since we're dealing + // with the flat segmentation model. threadContexts[0]->setPC(prog_entry); threadContexts[0]->setNextPC(prog_entry + sizeof(MachInst));