* ========== Copyright Header Begin ==========================================
* OpenSPARC T2 Processor File: RF_8win_macros.h
* Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
* 4150 Network Circle, Santa Clara, California 95054, U.S.A.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
* This 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 program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* For the avoidance of doubt, and except that if any non-GPL license
* choice is available it will apply instead, Sun elects to use only
* the General Public License version 2 (GPLv2) at this time for any
* software where a choice of GPL license versions is made
* available with the language indicating that GPLv2 or any later version
* may be used, or where a choice of which version of the GPL is applied is
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* ========== Copyright Header End ============================================
!----------------------------------------------------------------------
! These macros read out a block of registers by
using store inst
#define read_locals(reg) \
#define read_globals(reg) \
!----------------------------------------------------------------------
! This macro loads a
register file block from memory
#define load_local_block(addr) \
#define load_global_block(addr) \
#define load_out_block(addr) \
#define load_in_block(addr) \
!----------------------------------------------------------------------
! This macro loads up all of the visible registers including globals
! from the address supplied in the
"reg". %g1 is assumed to be
! this register. This will
not map in a block
.
#define ld_no_incr_mapped(reg) \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
!----------------------------------------------------------------------
! This macro does the read out of the specified
register by
#define read_em_out(reg) \
!-------------------------------------------------------------------
! These macros read all of the registers out in a block
! Because of the way Read_em_out works
, %g1 must be the first one
! that is read out
using these
macros (otherwise it will get clobbered
)
#define read_locals_out() \
#define read_outs_out() \
#define read_globals_out() \
!----------------------------------------------------------------------
! This macro reads out the entire
register file (except
for any
! blocks that are mapped out
). read the globals out first
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
wrpr %l1,%l2,%canrestore; \
!----------------------------------------------------------------------
! These macros load up registers with the cumulative sum of the two
#define load_local_sum(reg1, reg2) \
#define load_global_sum(reg1, reg2) \
#define load_in_sum(reg1, reg2) \
#define load_out_sum(reg1, reg2) \
! same as above
4 macros but also forces a read immediately
#define load_local_sum_read(reg1, reg2) \
#define load_global_sum_read(reg1, reg2) \
#define load_in_sum_read(reg1, reg2) \
#define load_out_sum_read(reg1, reg2) \
!----------------------------------------------------------------------
! This macro loads up all the visible
registers (including globals
)
! using a accumulating sum
.
#define ld_sum_mapped(accum, incr, dum1) \
wrpr %l1,%l2,%canrestore; \
load_global_sum(accum, incr); \
load_out_sum(accum, incr); \
load_local_sum(accum, incr); \
load_in_sum(accum, incr); \
wrpr %l1,%l2,%canrestore; \
load_local_sum(accum, incr); \
load_in_sum(accum, incr); \
wrpr %l1,%l2,%canrestore; \
load_local_sum(accum, incr)
! Same as above
, but uses the macros that cause a read to
! the just written
register
#define ld_sum_mapped_read(accum, incr, dum1) \
wrpr %l1,%l2,%canrestore; \
load_global_sum_read(accum, incr); \
load_out_sum_read(accum, incr); \
load_local_sum_read(accum, incr); \
load_in_sum_read(accum, incr); \
wrpr %l1,%l2,%canrestore; \
load_local_sum_read(accum, incr); \
load_in_sum_read(accum, incr); \
wrpr %l1,%l2,%canrestore; \
load_local_sum_read(accum, incr)