regwin.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2005 Jakub Jermar
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  *
00009  * - Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  * - Redistributions in binary form must reproduce the above copyright
00012  *   notice, this list of conditions and the following disclaimer in the
00013  *   documentation and/or other materials provided with the distribution.
00014  * - The name of the author may not be used to endorse or promote products
00015  *   derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  */
00028 
00037 #ifndef __sparc64_REGWIN_H__
00038 #define __sparc64_REGWIN_H__
00039 
00040 #include <arch/stack.h>
00041 
00042 #define TT_CLEAN_WINDOW                 0x24
00043 #define TT_SPILL_0_NORMAL               0x80
00044 #define TT_FILL_0_NORMAL                0xc0
00045 
00046 #define REGWIN_HANDLER_SIZE             128
00047 
00048 #define CLEAN_WINDOW_HANDLER_SIZE       REGWIN_HANDLER_SIZE
00049 #define SPILL_HANDLER_SIZE              REGWIN_HANDLER_SIZE
00050 #define FILL_HANDLER_SIZE               REGWIN_HANDLER_SIZE
00051 
00053 #define L0_OFFSET       0
00054 #define L1_OFFSET       8
00055 #define L2_OFFSET       16
00056 #define L3_OFFSET       24
00057 #define L4_OFFSET       32
00058 #define L5_OFFSET       40
00059 #define L6_OFFSET       48
00060 #define L7_OFFSET       56
00061 #define I0_OFFSET       64
00062 #define I1_OFFSET       72
00063 #define I2_OFFSET       80
00064 #define I3_OFFSET       88
00065 #define I4_OFFSET       96
00066 #define I5_OFFSET       104
00067 #define I6_OFFSET       112
00068 #define I7_OFFSET       120
00069 
00070 #ifdef __ASM__
00071 .macro SPILL_NORMAL_HANDLER
00072         stx %l0, [%sp + STACK_BIAS + L0_OFFSET] 
00073         stx %l1, [%sp + STACK_BIAS + L1_OFFSET]
00074         stx %l2, [%sp + STACK_BIAS + L2_OFFSET]
00075         stx %l3, [%sp + STACK_BIAS + L3_OFFSET]
00076         stx %l4, [%sp + STACK_BIAS + L4_OFFSET]
00077         stx %l5, [%sp + STACK_BIAS + L5_OFFSET]
00078         stx %l6, [%sp + STACK_BIAS + L6_OFFSET]
00079         stx %l7, [%sp + STACK_BIAS + L7_OFFSET]
00080         stx %i0, [%sp + STACK_BIAS + I0_OFFSET]
00081         stx %i1, [%sp + STACK_BIAS + I1_OFFSET]
00082         stx %i2, [%sp + STACK_BIAS + I2_OFFSET]
00083         stx %i3, [%sp + STACK_BIAS + I3_OFFSET]
00084         stx %i4, [%sp + STACK_BIAS + I4_OFFSET]
00085         stx %i5, [%sp + STACK_BIAS + I5_OFFSET]
00086         stx %i6, [%sp + STACK_BIAS + I6_OFFSET]
00087         stx %i7, [%sp + STACK_BIAS + I7_OFFSET]
00088         saved
00089         retry
00090 .endm
00091 
00092 .macro FILL_NORMAL_HANDLER
00093         ldx [%sp + STACK_BIAS + L0_OFFSET], %l0
00094         ldx [%sp + STACK_BIAS + L1_OFFSET], %l1
00095         ldx [%sp + STACK_BIAS + L2_OFFSET], %l2
00096         ldx [%sp + STACK_BIAS + L3_OFFSET], %l3
00097         ldx [%sp + STACK_BIAS + L4_OFFSET], %l4
00098         ldx [%sp + STACK_BIAS + L5_OFFSET], %l5
00099         ldx [%sp + STACK_BIAS + L6_OFFSET], %l6
00100         ldx [%sp + STACK_BIAS + L7_OFFSET], %l7
00101         ldx [%sp + STACK_BIAS + I0_OFFSET], %i0
00102         ldx [%sp + STACK_BIAS + I1_OFFSET], %i1
00103         ldx [%sp + STACK_BIAS + I2_OFFSET], %i2
00104         ldx [%sp + STACK_BIAS + I3_OFFSET], %i3
00105         ldx [%sp + STACK_BIAS + I4_OFFSET], %i4
00106         ldx [%sp + STACK_BIAS + I5_OFFSET], %i5
00107         ldx [%sp + STACK_BIAS + I6_OFFSET], %i6
00108         ldx [%sp + STACK_BIAS + I7_OFFSET], %i7
00109         restored
00110         retry
00111 .endm
00112 
00113 .macro CLEAN_WINDOW_HANDLER
00114         rdpr %cleanwin, %l0
00115         add %l0, 1, %l0
00116         wrpr %l0, 0, %cleanwin
00117         mov %r0, %l0
00118         mov %r0, %l1
00119         mov %r0, %l2
00120         mov %r0, %l3
00121         mov %r0, %l4
00122         mov %r0, %l5
00123         mov %r0, %l6
00124         mov %r0, %l7
00125         mov %r0, %o0
00126         mov %r0, %o1
00127         mov %r0, %o2
00128         mov %r0, %o3
00129         mov %r0, %o4
00130         mov %r0, %o5
00131         mov %r0, %o6
00132         mov %r0, %o7
00133         retry
00134 .endm
00135 #endif /* __ASM__ */
00136 
00137 #endif
00138 

Generated on Sun Jun 18 17:37:25 2006 for HelenOS Kernel (sparc64) by  doxygen 1.4.6