mirror of
				https://gitlab.com/qemu-project/qemu-palcode.git
				synced 2024-02-13 08:32:59 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Common definitions for QEMU Emulation PALcode
 | |
| 
 | |
|    Copyright (C) 2011 Richard Henderson
 | |
| 
 | |
|    This file is part of QEMU PALcode.
 | |
| 
 | |
|    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; either version 2 of the License or
 | |
|    (at your option) any later version.
 | |
| 
 | |
|    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 text
 | |
|    of the GNU General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU General Public License
 | |
|    along with this program; see the file COPYING.  If not see
 | |
|    <http://www.gnu.org/licenses/>.  */
 | |
| 
 | |
| #ifndef PAL_H
 | |
| #define PAL_H 1
 | |
| 
 | |
| /* General Purpose Registers.  */
 | |
| #define	v0	$0
 | |
| #define t0	$1
 | |
| #define t1	$2
 | |
| #define t2	$3
 | |
| #define t3	$4
 | |
| #define t4	$5
 | |
| #define t5	$6
 | |
| #define a0	$16
 | |
| #define a1	$17
 | |
| #define a2	$18
 | |
| #define a3	$19
 | |
| #define a4	$20
 | |
| #define a5	$21
 | |
| #define t8	$22
 | |
| #define t9	$23
 | |
| #define t10	$24
 | |
| 
 | |
| /* PALcode Shadow Registers.  These registers are swapped out when
 | |
|    QEMU is in PALmode.  Unlike real hardware, there is no enable bit.
 | |
|    However, also unlike real hardware, the originals can be accessed
 | |
|    via MTPR/MFPR.  */
 | |
| #define p0	$8
 | |
| #define p1	$9
 | |
| #define p2	$10
 | |
| #define p3	$11
 | |
| #define p4	$12
 | |
| #define p5	$13
 | |
| #define p6	$14		// Used to save exc_addr for machine check
 | |
| #define p7	$25
 | |
| 
 | |
| /* QEMU Processor Registers.  */
 | |
| #define	qemu_ps		0
 | |
| #define qemu_fen	1
 | |
| #define qemu_pcc_ofs	2
 | |
| #define qemu_trap_arg0	3
 | |
| #define qemu_trap_arg1	4
 | |
| #define qemu_trap_arg2	5
 | |
| #define qemu_exc_addr	6
 | |
| #define qemu_palbr	7
 | |
| #define qemu_ptbr	8
 | |
| #define qemu_vptptr	9
 | |
| #define qemu_unique	10
 | |
| #define qemu_sysval	11
 | |
| #define qemu_usp	12
 | |
| 
 | |
| #define qemu_shadow0	32
 | |
| #define qemu_shadow1	33
 | |
| #define qemu_shadow2	34
 | |
| #define qemu_shadow3	35
 | |
| #define qemu_shadow4	36
 | |
| #define qemu_shadow5	37
 | |
| #define qemu_shadow6	38
 | |
| #define qemu_shadow7	39
 | |
| 
 | |
| /* PALcode Processor Register Private Storage.  */
 | |
| #define pt0		40
 | |
| #define pt1		41
 | |
| #define pt2		42
 | |
| #define pt3		43
 | |
| #define pt4		44
 | |
| #define pt5		45
 | |
| #define pt6		46
 | |
| #define pt7		47
 | |
| #define pt8		48
 | |
| #define pt9		49
 | |
| #define pt10		50
 | |
| #define pt11		51
 | |
| #define pt12		52
 | |
| #define pt13		53
 | |
| #define pt14		54
 | |
| #define pt15		55
 | |
| #define pt16		56
 | |
| #define pt17		57
 | |
| #define pt18		58
 | |
| #define pt19		59
 | |
| #define pt20		60
 | |
| #define pt21		61
 | |
| #define pt22		62
 | |
| #define pt23		63
 | |
| 
 | |
| /* QEMU function calls, via mtpr.  */
 | |
| #define qemu_tbia	255
 | |
| #define qemu_tbis	254
 | |
| #define qemu_wait	253
 | |
| #define qemu_halt	252
 | |
| #define qemu_alarm	251
 | |
| #define qemu_walltime	250
 | |
| #define qemu_vmtime	249
 | |
| 
 | |
| /* PALcode uses of the private storage slots.  */
 | |
| #define ptEntUna	pt0
 | |
| #define ptEntIF		pt1
 | |
| #define ptEntSys	pt2
 | |
| #define ptEntInt	pt3
 | |
| #define ptEntArith	pt4
 | |
| #define ptEntMM		pt5
 | |
| #define ptMces		pt6
 | |
| #define ptKsp		pt7
 | |
| #define ptKgp		pt8
 | |
| #define ptPcbb		pt9
 | |
| #define ptPgp		pt10
 | |
| #define ptMisc		pt11
 | |
| #define ptMchk0		pt12
 | |
| #define ptMchk1		pt13
 | |
| #define ptMchk2		pt14
 | |
| #define ptMchk3		pt15
 | |
| #define ptMchk4		pt16
 | |
| #define ptMchk5		pt17
 | |
| #define ptSys0		pt18
 | |
| #define ptSys1		pt19
 | |
| 
 | |
| /*
 | |
|  * Shortcuts for various PALmode instructions.
 | |
|  */
 | |
| #define mtpr	hw_mtpr
 | |
| #define mfpr	hw_mfpr
 | |
| #define stq_p	hw_stq/p
 | |
| #define stl_p	hw_stl/p
 | |
| #define ldl_p	hw_ldl/p
 | |
| #define ldq_p	hw_ldq/p
 | |
| 
 | |
| /* QEMU recognizes the EV4/EV5 HW_REI instruction as a special case of
 | |
|    the EV6 HW_RET instruction.  This pulls the destination address from
 | |
|    the EXC_ADDR processor register.  */
 | |
| #define hw_rei	hw_ret ($31)
 | |
| 
 | |
| 
 | |
| .macro	ENDFN	function
 | |
| 	.type	\function, @function
 | |
| 	.size	\function, . - \function
 | |
| .endm
 | |
| 
 | |
| #endif /* PAL_H */
 | 
