thread_context.cc revision 5712
15217Ssaidi@eecs.umich.edu/*
25217Ssaidi@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan
35217Ssaidi@eecs.umich.edu * All rights reserved.
45217Ssaidi@eecs.umich.edu *
55217Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
65217Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are
75217Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright
85217Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
95217Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
105217Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
115217Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution;
125217Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its
135217Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from
145217Ssaidi@eecs.umich.edu * this software without specific prior written permission.
155217Ssaidi@eecs.umich.edu *
165217Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175217Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185217Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195217Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205217Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215217Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225217Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235217Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245217Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255217Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265217Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275217Ssaidi@eecs.umich.edu *
285217Ssaidi@eecs.umich.edu * Authors: Kevin Lim
295217Ssaidi@eecs.umich.edu */
305217Ssaidi@eecs.umich.edu
315217Ssaidi@eecs.umich.edu#include "base/misc.hh"
325217Ssaidi@eecs.umich.edu#include "base/trace.hh"
335217Ssaidi@eecs.umich.edu#include "cpu/thread_context.hh"
345217Ssaidi@eecs.umich.edu
355217Ssaidi@eecs.umich.eduvoid
365217Ssaidi@eecs.umich.eduThreadContext::compare(ThreadContext *one, ThreadContext *two)
375217Ssaidi@eecs.umich.edu{
385217Ssaidi@eecs.umich.edu    DPRINTF(Context, "Comparing thread contexts\n");
395217Ssaidi@eecs.umich.edu
405217Ssaidi@eecs.umich.edu    // First loop through the integer registers.
415217Ssaidi@eecs.umich.edu    for (int i = 0; i < TheISA::NumIntRegs; ++i) {
425217Ssaidi@eecs.umich.edu        TheISA::IntReg t1 = one->readIntReg(i);
435217Ssaidi@eecs.umich.edu        TheISA::IntReg t2 = two->readIntReg(i);
445217Ssaidi@eecs.umich.edu        if (t1 != t2)
455217Ssaidi@eecs.umich.edu            panic("Int reg idx %d doesn't match, one: %#x, two: %#x",
465217Ssaidi@eecs.umich.edu                  i, t1, t2);
475217Ssaidi@eecs.umich.edu    }
485217Ssaidi@eecs.umich.edu
495217Ssaidi@eecs.umich.edu    // Then loop through the floating point registers.
505217Ssaidi@eecs.umich.edu    for (int i = 0; i < TheISA::NumFloatRegs; ++i) {
515217Ssaidi@eecs.umich.edu        TheISA::FloatRegBits t1 = one->readFloatRegBits(i);
525217Ssaidi@eecs.umich.edu        TheISA::FloatRegBits t2 = two->readFloatRegBits(i);
535217Ssaidi@eecs.umich.edu        if (t1 != t2)
545217Ssaidi@eecs.umich.edu            panic("Float reg idx %d doesn't match, one: %#x, two: %#x",
555217Ssaidi@eecs.umich.edu                  i, t1, t2);
565217Ssaidi@eecs.umich.edu    }
575217Ssaidi@eecs.umich.edu#if FULL_SYSTEM
585217Ssaidi@eecs.umich.edu    for (int i = 0; i < TheISA::NumMiscRegs; ++i) {
595217Ssaidi@eecs.umich.edu        TheISA::MiscReg t1 = one->readMiscRegNoEffect(i);
605217Ssaidi@eecs.umich.edu        TheISA::MiscReg t2 = two->readMiscRegNoEffect(i);
615217Ssaidi@eecs.umich.edu        if (t1 != t2)
625217Ssaidi@eecs.umich.edu            panic("Misc reg idx %d doesn't match, one: %#x, two: %#x",
635217Ssaidi@eecs.umich.edu                  i, t1, t2);
645217Ssaidi@eecs.umich.edu    }
655217Ssaidi@eecs.umich.edu#endif
665217Ssaidi@eecs.umich.edu
675217Ssaidi@eecs.umich.edu    Addr pc1 = one->readPC();
685217Ssaidi@eecs.umich.edu    Addr pc2 = two->readPC();
695217Ssaidi@eecs.umich.edu    if (pc1 != pc2)
705217Ssaidi@eecs.umich.edu        panic("PCs doesn't match, one: %#x, two: %#x", pc1, pc2);
715217Ssaidi@eecs.umich.edu
725217Ssaidi@eecs.umich.edu    Addr npc1 = one->readNextPC();
735217Ssaidi@eecs.umich.edu    Addr npc2 = two->readNextPC();
745217Ssaidi@eecs.umich.edu    if (npc1 != npc2)
755217Ssaidi@eecs.umich.edu        panic("NPCs doesn't match, one: %#x, two: %#x", npc1, npc2);
765217Ssaidi@eecs.umich.edu
775712Shsul@eecs.umich.edu    int id1 = one->cpuId();
785712Shsul@eecs.umich.edu    int id2 = two->cpuId();
795217Ssaidi@eecs.umich.edu    if (id1 != id2)
805217Ssaidi@eecs.umich.edu        panic("CPU ids don't match, one: %d, two: %d", id1, id2);
815217Ssaidi@eecs.umich.edu}
82