 fad6cb1a56
			
		
	
	
		fad6cb1a56
		
	
	
	
	
		
			
			The attached patch updates the FSF address in the GPL/LGPL boilerplate in most GPL/LGPLed files, and also in COPYING.LIB. Signed-off-by: Stuart Brady <stuart.brady@gmail.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6162 c046a42c-6fe2-441c-8c8c-71466251a162
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  Save/restore host registrs.
 | |
|  *
 | |
|  *  Copyright (c) 2007 CodeSourcery
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * This library 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
 | |
|  */
 | |
| 
 | |
| /* The GCC global register variable extension is used to reserve some
 | |
|    host registers for use by generated code.  However only the core parts of
 | |
|    the translation engine are compiled with these settings.  We must manually
 | |
|    save/restore these registers when called from regular code.
 | |
|    It is not sufficient to save/restore T0 et. al. as these may be declared
 | |
|    with a datatype smaller than the actual register.  */
 | |
| 
 | |
| #if defined(DECLARE_HOST_REGS)
 | |
| 
 | |
| #define DO_REG(REG)					\
 | |
|     register host_reg_t reg_AREG##REG asm(AREG##REG);	\
 | |
|     volatile host_reg_t saved_AREG##REG;
 | |
| 
 | |
| #elif defined(SAVE_HOST_REGS)
 | |
| 
 | |
| #define DO_REG(REG)					\
 | |
|     __asm__ __volatile__ ("" : "=r" (reg_AREG##REG));	\
 | |
|     saved_AREG##REG = reg_AREG##REG;
 | |
| 
 | |
| #else
 | |
| 
 | |
| #define DO_REG(REG)                                     \
 | |
|     reg_AREG##REG = saved_AREG##REG;		        \
 | |
|     __asm__ __volatile__ ("" : : "r" (reg_AREG##REG));
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG0
 | |
| DO_REG(0)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG1
 | |
| DO_REG(1)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG2
 | |
| DO_REG(2)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG3
 | |
| DO_REG(3)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG4
 | |
| DO_REG(4)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG5
 | |
| DO_REG(5)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG6
 | |
| DO_REG(6)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG7
 | |
| DO_REG(7)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG8
 | |
| DO_REG(8)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG9
 | |
| DO_REG(9)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG10
 | |
| DO_REG(10)
 | |
| #endif
 | |
| 
 | |
| #ifdef AREG11
 | |
| DO_REG(11)
 | |
| #endif
 | |
| 
 | |
| #undef SAVE_HOST_REGS
 | |
| #undef DECLARE_HOST_REGS
 | |
| #undef DO_REG
 |