Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / obp / obp / pkg / fcode / applcode.fth
\ ========== Copyright Header Begin ==========================================
\
\ Hypervisor Software File: applcode.fth
\
\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
\
\ - Do no alter or remove copyright notices
\
\ - Redistribution and use of this software in source and binary forms, with
\ or without modification, are permitted provided that the following
\ conditions are met:
\
\ - Redistribution of source code must retain the above copyright notice,
\ this list of conditions and the following disclaimer.
\
\ - Redistribution in binary form must reproduce the above copyright notice,
\ this list of conditions and the following disclaimer in the
\ documentation and/or other materials provided with the distribution.
\
\ Neither the name of Sun Microsystems, Inc. or the names of contributors
\ may be used to endorse or promote products derived from this software
\ without specific prior written permission.
\
\ This software is provided "AS IS," without a warranty of any kind.
\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\
\ You acknowledge that this software is not designed, licensed or
\ intended for use in the design, construction, operation or maintenance of
\ any nuclear facility.
\
\ ========== Copyright Header End ============================================
id: @(#)applcode.fth 2.31 03/12/08 13:22:46
purpose: Miscellaneous FCode functions
copyright: Copyright 1990-2003 Sun Microsystems, Inc. All Rights Reserved
copyright: Use is subject to license terms.
headerless
: 4-byte-id ( -- ) ; \ version 1 token
headers
\ FCode version
h# 3.0000 constant fcode-revision ( -- n )
alias fcode-version fcode-revision ( -- n )
alias version fcode-revision ( -- n )
major-release# d# 16 << minor-release# + constant firmware-version
\ 5 constant processor-type
alias v1 noop \ Include version 1 FCode support
alias v2 noop \ Include version 2.0 FCode support
alias v2.1 noop \ Include version 2.1 FCode support
alias v2.2 noop \ Include version 2.2 FCode support
alias v2.3 noop \ Include version 2.3 FCode support
alias v3 noop \ Include version 3 FCode support
: (is-user-word) ( adr len acf -- )
also forth definitions
-rot $create -1 setalias
previous definitions
;
-1 constant -1
: suspend-fcode ( -- ) ;
: map-low ( offset size -- virtual ) my-space swap " map-in" $call-parent ;
: encode-intr ( int-level vector -- )
>r sbus-intr>cpu encode-int r> encode-int encode+
;
also magic-properties definitions
: intr ( value-str name-str -- value-str name-str )
\ Create an "interrupts" property unless one already exists
" interrupts" get-my-property if ( value$ name$ )
2over 0 0 encode-bytes 2swap bounds ?do ( value$ name$ prop$ )
i /l get-encoded-int encode-int encode+ ( value$ name$ prop$' )
2 /l* +loop " interrupts" property
else ( value$ name$ prop-adr,len )
2drop ( value$ name$ )
then ( value$ name$ )
;
previous definitions
alias name device-name
: model ( adr len -- ) " model" string-property ;
: reg ( adr space size -- ) encode-reg " reg" property ;
: intr ( int-level vector -- ) encode-intr " intr" property ;
[ifnexist] wbflips
: wbflip ( n1 -- n2 ) wbsplit swap bwjoin ;
: wbflips ( adr len -- )
bounds ?do
i unaligned-w@ wbflip i unaligned-w!
/w +loop
;
: lwflip ( n1 -- n2 ) lwsplit swap wljoin ;
: lwflips ( adr len -- )
bounds ?do
i unaligned-l@ lwflip i unaligned-l!
/l +loop
;
: lbflip ( n1 -- n2 ) lbsplit swap 2swap swap bljoin ;
: lbflips ( adr len -- )
bounds ?do
i unaligned-l@ lbflip i unaligned-l!
/l +loop
;
: xbflip ( x -- x' ) xlsplit lbflip swap lbflip lxjoin ;
: xlflip ( x -- x' ) xlsplit swap lxjoin ;
: xwflip ( x -- x' ) xlsplit lwflip swap lwflip lxjoin ;
: xbflips ( adr,len -- )
bounds ?do
i unaligned-@ xbflip i unaligned-!
/x +loop
;
: xlflips ( adr,len -- )
bounds ?do
i unaligned-@ xlflip i unaligned-!
/x +loop
;
: xwflips ( adr,len -- )
bounds ?do
i unaligned-@ xwflip i unaligned-!
/x +loop
;
[then]
\ alias wflips wbflips
\ alias lflips lwflips