00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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
00136
00137 #endif
00138