Annotation of qemu/hostregs_helper.h, revision 1.1.1.2

1.1       root        1: /*
                      2:  *  Save/restore host registrs.
                      3:  *
                      4:  *  Copyright (c) 2007 CodeSourcery
                      5:  *
                      6:  * This library is free software; you can redistribute it and/or
                      7:  * modify it under the terms of the GNU Lesser General Public
                      8:  * License as published by the Free Software Foundation; either
                      9:  * version 2 of the License, or (at your option) any later version.
                     10:  *
                     11:  * This library is distributed in the hope that it will be useful,
                     12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * Lesser General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU Lesser General Public
                     17:  * License along with this library; if not, write to the Free Software
1.1.1.2 ! root       18:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
1.1       root       19:  */
                     20: 
1.1.1.2 ! root       21: /* The GCC global register variable extension is used to reserve some
        !            22:    host registers for use by generated code.  However only the core parts of
        !            23:    the translation engine are compiled with these settings.  We must manually
1.1       root       24:    save/restore these registers when called from regular code.
                     25:    It is not sufficient to save/restore T0 et. al. as these may be declared
                     26:    with a datatype smaller than the actual register.  */
                     27: 
                     28: #if defined(DECLARE_HOST_REGS)
                     29: 
                     30: #define DO_REG(REG)                                    \
                     31:     register host_reg_t reg_AREG##REG asm(AREG##REG);  \
                     32:     volatile host_reg_t saved_AREG##REG;
                     33: 
                     34: #elif defined(SAVE_HOST_REGS)
                     35: 
                     36: #define DO_REG(REG)                                    \
                     37:     __asm__ __volatile__ ("" : "=r" (reg_AREG##REG));  \
                     38:     saved_AREG##REG = reg_AREG##REG;
                     39: 
                     40: #else
                     41: 
                     42: #define DO_REG(REG)                                     \
                     43:     reg_AREG##REG = saved_AREG##REG;                   \
                     44:     __asm__ __volatile__ ("" : : "r" (reg_AREG##REG));
                     45: 
                     46: #endif
                     47: 
                     48: #ifdef AREG0
                     49: DO_REG(0)
                     50: #endif
                     51: 
                     52: #ifdef AREG1
                     53: DO_REG(1)
                     54: #endif
                     55: 
                     56: #ifdef AREG2
                     57: DO_REG(2)
                     58: #endif
                     59: 
                     60: #ifdef AREG3
                     61: DO_REG(3)
                     62: #endif
                     63: 
                     64: #ifdef AREG4
                     65: DO_REG(4)
                     66: #endif
                     67: 
                     68: #ifdef AREG5
                     69: DO_REG(5)
                     70: #endif
                     71: 
                     72: #ifdef AREG6
                     73: DO_REG(6)
                     74: #endif
                     75: 
                     76: #ifdef AREG7
                     77: DO_REG(7)
                     78: #endif
                     79: 
                     80: #ifdef AREG8
                     81: DO_REG(8)
                     82: #endif
                     83: 
                     84: #ifdef AREG9
                     85: DO_REG(9)
                     86: #endif
                     87: 
                     88: #ifdef AREG10
                     89: DO_REG(10)
                     90: #endif
                     91: 
                     92: #ifdef AREG11
                     93: DO_REG(11)
                     94: #endif
                     95: 
                     96: #undef SAVE_HOST_REGS
                     97: #undef DECLARE_HOST_REGS
                     98: #undef DO_REG

unix.superglobalmegacorp.com