// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: SS_RegCompare.cc
// Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
// The above named program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License version 2 as published by the Free Software Foundation.
// The above named program is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// You should have received a copy of the GNU General Public
// License along with this work; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
// ========== Copyright Header End ============================================
// @-ARCH-@_RegCompare.cc is automatically generated from
// ss/api/pli/bin/Bl_RegCompare.cc, do not modify @-ARCH-@_RegCompare.cc
// make necessary changes in ss/api/pli/bin/Bl_RegCompare.cc instead.
#include "@-ARCH-@_RegCompare.h"
@
-ARCH
-@
_RegCompare::@
-ARCH
-@
_RegCompare( @
-ARCH
-VF
-@_Strand
* _strand
, SS_PliSocket
* _socket
)/*{{{*/
SS_RegCompare(_strand
,_socket
),
void @
-ARCH
-@
_RegCompare::initialise()/*{{{*/
uint_t id
= strand
->strand_id();
SS_RegCompare::initialise();
for (RegId
* c
= reg_list
; *c
; c
++)
uint64_t new_val
= get(ci
);
new_val
&= ~uint64_t(0x2000);
else if (ci
== CTR_HPSTATE
)
new_val
&= ~uint64_t(0x800);
void @
-ARCH
-@
_RegCompare::compare( uint32_t opc
)/*{{{*/
uint_t id
= strand
->strand_id();
SS_RegCompare::compare();
for (RegId
* c
= reg_list
; *c
; c
++)
uint64_t old_val
= ctr
[ci
];
uint64_t new_val
= get(ci
);
new_val
&= ~uint64_t(0x2000);
else if (ci
== CTR_HPSTATE
)
new_val
&= ~uint64_t(0x800);
sprintf(cmp
,"STEP: %d C %d %016llx ",id
,ci
,new_val
);
if (cmpr_list
[SS_RegCompare::CTR_OPCODE
])
sprintf(cmp
,"STEP: %d C 255 %08x ",id
,opc
);
void @
-ARCH
-@
_RegCompare::dump_regs()/*{{{*/
SS_RegCompare::dump_regs();
CTR_PC
, CTR_NPC
, CTR_CWP
, CTR_CCR
,
CTR_FPRS
, CTR_FSR
, CTR_PSTATE
, CTR_HPSTATE
,
CTR_ASI
, CTR_TICK
, CTR_TL
, CTR_PIL
,
CTR_CANSAVE
, CTR_CANRESTORE
, CTR_CLEANWIN
, CTR_OTHERWIN
,
CTR_HVER
, CTR_WSTATE
, CTR_GL
, CTR_TBA
,
CTR_HTBA
, CTR_TICK_CMPR
, CTR_STICK_CMPR
, CTR_HSTICK_CMPR
,
CTR_HINTP
, CTR_SOFTINT
, CTR_GSR
, CTR_INTR_RECV
,
CTR_TPC1
, CTR_TNPC1
, CTR_TSTATE1
, CTR_TT1
,
CTR_TPC2
, CTR_TNPC2
, CTR_TSTATE2
, CTR_TT2
,
CTR_TPC3
, CTR_TNPC3
, CTR_TSTATE3
, CTR_TT3
,
CTR_TPC4
, CTR_TNPC4
, CTR_TSTATE4
, CTR_TT4
,
CTR_TPC5
, CTR_TNPC5
, CTR_TSTATE5
, CTR_TT5
,
CTR_TPC6
, CTR_TNPC6
, CTR_TSTATE6
, CTR_TT6
,
CTR_HTSTATE1
, CTR_HTSTATE2
, CTR_HTSTATE3
, CTR_HTSTATE4
,
CTR_HTSTATE5
, CTR_HTSTATE6
, CTR_LSU_CONTROL
, CTR_DWATCHPOINT_ADDR
,
CTR_CTXT_PRIM_0
, CTR_CTXT_SEC_0
, CTR_CTXT_PRIM_1
, CTR_CTXT_SEC_1
,
CTR_I_TAG_ACC
, CTR_D_TAG_ACC
, CTR_D_SFAR
, CTR_CTXT_Z_TSB_CFG0
,
CTR_CTXT_Z_TSB_CFG1
, CTR_CTXT_Z_TSB_CFG2
, CTR_CTXT_Z_TSB_CFG3
, CTR_CTXT_NZ_TSB_CFG0
,
CTR_CTXT_NZ_TSB_CFG1
, CTR_CTXT_NZ_TSB_CFG2
, CTR_CTXT_NZ_TSB_CFG3
int size
= sizeof(dumplist
)/sizeof(dumplist
[0]);
for (int j
= 0; j
< 4 && ii
< size
; j
++)
fprintf(stdout
, " %16s", reg_name
[dumplist
[ii
]]);
for (int j
= 0; j
< 4 && ii
< size
; j
++)
fprintf(stdout
, " %016llx", get((RegId
)dumplist
[ii
]));
uint64_t @
-ARCH
-@
_RegCompare::get( RegId id
)/*{{{*/
// Internal we keep the pc, npc, tpc, and tnpc values
// at 64 bits for detecting cases where we fall into the va-hole.
// However, @-ARCH-@ "externally" only implements 48 bits (well 46)
// of the address, so when we read those pc values we sign extend
// the 48 bit value to 64 bit.
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->pc()) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->npc()) << sft
) >> sft
;
value
= strand
->tick_cmpr();
value
= strand
->stick_cmpr();
value
= strand
->pstate();
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[1].pc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[2].pc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[3].pc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[4].pc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[5].pc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[6].pc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[1].npc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[2].npc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[3].npc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[4].npc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[5].npc
) << sft
) >> sft
;
sft
= 64 - strand
->va_bits();
value
= (SS_Vaddr(strand
->trap_state
[6].npc
) << sft
) >> sft
;
value
= strand
->trap_state
[1].tstate
;
value
= strand
->trap_state
[2].tstate
;
value
= strand
->trap_state
[3].tstate
;
value
= strand
->trap_state
[4].tstate
;
value
= strand
->trap_state
[5].tstate
;
value
= strand
->trap_state
[6].tstate
;
value
= strand
->trap_state
[1].tt
;
value
= strand
->trap_state
[2].tt
;
value
= strand
->trap_state
[3].tt
;
value
= strand
->trap_state
[4].tt
;
value
= strand
->trap_state
[5].tt
;
value
= strand
->trap_state
[6].tt
;
value
= strand
->cansave();
value
= strand
->canrestore();
value
= strand
->otherwin();
value
= strand
->wstate();
value
= strand
->cleanwin();
value
= strand
->softint();
value
= strand
->intr_recv
;
value
= strand
->hpstate();
value
= strand
->trap_state
[1].htstate
;
value
= strand
->trap_state
[2].htstate
;
value
= strand
->trap_state
[3].htstate
;
value
= strand
->trap_state
[4].htstate
;
value
= strand
->trap_state
[5].htstate
;
value
= strand
->trap_state
[6].htstate
;
value
= strand
->hstick_cmpr();
value
= strand
->data_sfar();
value
= strand
->primary_context
[0]();
value
= strand
->secondary_context
[0]();
value
= strand
->primary_context
[1]();
value
= strand
->secondary_context
[1]();
value
= strand
->lsu_ctr();
value
= strand
->inst_tag_access();
case CTR_CTXT_Z_TSB_CFG0
:
value
= strand
->nucleus_tsb_config
[0]();
case CTR_CTXT_Z_TSB_CFG1
:
value
= strand
->nucleus_tsb_config
[1]();
case CTR_CTXT_Z_TSB_CFG2
:
value
= strand
->nucleus_tsb_config
[2]();
case CTR_CTXT_Z_TSB_CFG3
:
value
= strand
->nucleus_tsb_config
[3]();
case CTR_CTXT_NZ_TSB_CFG0
:
value
= strand
->non_nucleus_tsb_config
[0]();
case CTR_CTXT_NZ_TSB_CFG1
:
value
= strand
->non_nucleus_tsb_config
[1]();
case CTR_CTXT_NZ_TSB_CFG2
:
value
= strand
->non_nucleus_tsb_config
[2]();
case CTR_CTXT_NZ_TSB_CFG3
:
value
= strand
->non_nucleus_tsb_config
[3]();
value
= strand
->data_tag_access();
case CTR_DWATCHPOINT_ADDR
:
value
= strand
->data_wp();
int @
-ARCH
-@
_RegCompare::name_2_index( string name
)/*{{{*/
return SS_RegCompare::CTR_G
;
return SS_RegCompare::CTR_W
;
return SS_RegCompare::CTR_F
;
else if (name
== "INSTR")
return SS_RegCompare::CTR_INSTR
;
else if (name
== "OPCODE")
return SS_RegCompare::CTR_OPCODE
;
for (int i
= CTR_PC
; i
< CTR_TOTAL
; i
++)
// no match, this is an error
fprintf(stdout
, "ERROR: name_2_index(): no match for %s\n", name
.c_str());
@
-ARCH
-@
_RegCompare::RegId @
-ARCH
-@
_RegCompare::reg_list
[] =/*{{{*/
@
-ARCH
-@
_RegCompare::CTR_PC
, @
-ARCH
-@
_RegCompare::CTR_NPC
, @
-ARCH
-@
_RegCompare::CTR_Y
, @
-ARCH
-@
_RegCompare::CTR_CCR
, @
-ARCH
-@
_RegCompare::CTR_FPRS
, @
-ARCH
-@
_RegCompare::CTR_FSR
, @
-ARCH
-@
_RegCompare::CTR_ASI
, @
-ARCH
-@
_RegCompare::CTR_GSR
, @
-ARCH
-@
_RegCompare::CTR_TICK_CMPR
, @
-ARCH
-@
_RegCompare::CTR_STICK_CMPR
, @
-ARCH
-@
_RegCompare::CTR_PSTATE
, @
-ARCH
-@
_RegCompare::CTR_TL
, @
-ARCH
-@
_RegCompare::CTR_PIL
, @
-ARCH
-@
_RegCompare::CTR_TPC1
, @
-ARCH
-@
_RegCompare::CTR_TPC2
, @
-ARCH
-@
_RegCompare::CTR_TPC3
, @
-ARCH
-@
_RegCompare::CTR_TPC4
, @
-ARCH
-@
_RegCompare::CTR_TPC5
, @
-ARCH
-@
_RegCompare::CTR_TPC6
, @
-ARCH
-@
_RegCompare::CTR_TNPC1
, @
-ARCH
-@
_RegCompare::CTR_TNPC2
, @
-ARCH
-@
_RegCompare::CTR_TNPC3
, @
-ARCH
-@
_RegCompare::CTR_TNPC4
, @
-ARCH
-@
_RegCompare::CTR_TNPC5
, @
-ARCH
-@
_RegCompare::CTR_TNPC6
, @
-ARCH
-@
_RegCompare::CTR_TSTATE1
, @
-ARCH
-@
_RegCompare::CTR_TSTATE2
, @
-ARCH
-@
_RegCompare::CTR_TSTATE3
, @
-ARCH
-@
_RegCompare::CTR_TSTATE4
, @
-ARCH
-@
_RegCompare::CTR_TSTATE5
, @
-ARCH
-@
_RegCompare::CTR_TSTATE6
, @
-ARCH
-@
_RegCompare::CTR_TT1
, @
-ARCH
-@
_RegCompare::CTR_TT2
, @
-ARCH
-@
_RegCompare::CTR_TT3
, @
-ARCH
-@
_RegCompare::CTR_TT4
, @
-ARCH
-@
_RegCompare::CTR_TT5
, @
-ARCH
-@
_RegCompare::CTR_TT6
, @
-ARCH
-@
_RegCompare::CTR_TBA
, @
-ARCH
-@
_RegCompare::CTR_HVER
, @
-ARCH
-@
_RegCompare::CTR_CWP
, @
-ARCH
-@
_RegCompare::CTR_CANSAVE
, @
-ARCH
-@
_RegCompare::CTR_CANRESTORE
, @
-ARCH
-@
_RegCompare::CTR_OTHERWIN
, @
-ARCH
-@
_RegCompare::CTR_WSTATE
, @
-ARCH
-@
_RegCompare::CTR_CLEANWIN
, @
-ARCH
-@
_RegCompare::CTR_SOFTINT
, @
-ARCH
-@
_RegCompare::CTR_INTR_RECV
, @
-ARCH
-@
_RegCompare::CTR_GL
, @
-ARCH
-@
_RegCompare::CTR_HPSTATE
, @
-ARCH
-@
_RegCompare::CTR_HTSTATE1
, @
-ARCH
-@
_RegCompare::CTR_HTSTATE2
, @
-ARCH
-@
_RegCompare::CTR_HTSTATE3
, @
-ARCH
-@
_RegCompare::CTR_HTSTATE4
, @
-ARCH
-@
_RegCompare::CTR_HTSTATE5
, @
-ARCH
-@
_RegCompare::CTR_HTSTATE6
, @
-ARCH
-@
_RegCompare::CTR_HTBA
, @
-ARCH
-@
_RegCompare::CTR_HINTP
, @
-ARCH
-@
_RegCompare::CTR_HSTICK_CMPR
, @
-ARCH
-@
_RegCompare::CTR_D_SFAR
// ToDo is this used or not?
, @
-ARCH
-@
_RegCompare::CTR_CTXT_PRIM_0
, @
-ARCH
-@
_RegCompare::CTR_CTXT_SEC_0
, @
-ARCH
-@
_RegCompare::CTR_CTXT_PRIM_1
, @
-ARCH
-@
_RegCompare::CTR_CTXT_SEC_1
, @
-ARCH
-@
_RegCompare::CTR_LSU_CONTROL
, @
-ARCH
-@
_RegCompare::CTR_I_TAG_ACC
, @
-ARCH
-@
_RegCompare::CTR_CTXT_Z_TSB_CFG0
, @
-ARCH
-@
_RegCompare::CTR_CTXT_Z_TSB_CFG1
, @
-ARCH
-@
_RegCompare::CTR_CTXT_Z_TSB_CFG2
, @
-ARCH
-@
_RegCompare::CTR_CTXT_Z_TSB_CFG3
, @
-ARCH
-@
_RegCompare::CTR_CTXT_NZ_TSB_CFG0
, @
-ARCH
-@
_RegCompare::CTR_CTXT_NZ_TSB_CFG1
, @
-ARCH
-@
_RegCompare::CTR_CTXT_NZ_TSB_CFG2
, @
-ARCH
-@
_RegCompare::CTR_CTXT_NZ_TSB_CFG3
, @
-ARCH
-@
_RegCompare::CTR_D_TAG_ACC
, @
-ARCH
-@
_RegCompare::CTR_DWATCHPOINT_ADDR
, @
-ARCH
-@
_RegCompare::RegId(0)
const char* @
-ARCH
-@
_RegCompare::reg_name
[] = /*{{{*/
"ECACHE_error_ENABLE", // 96
"ASYNCHRONOUS_FAULT_STATUS", // 97
"ASYNCHRONOUS_FAULT_ADDRESS", // 98
"INTR_DISPATCH_STATUS", // 102
"CTXT_Z_TSB_CFG0", // 132
"CTXT_Z_TSB_CFG1", // 133
"CTXT_Z_TSB_CFG2", // 134
"CTXT_Z_TSB_CFG3", // 135
"CTXT_NZ_TSB_CFG0", // 136
"CTXT_NZ_TSB_CFG1", // 137
"CTXT_NZ_TSB_CFG2", // 138
"CTXT_NZ_TSB_CFG3", // 139
"DWATCHPOINT_ADDR", // 142