source: mainline/kernel/arch/sparc64/include/trap/trap_table.h@ 8cee705

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 8cee705 was 7ba7c6d, checked in by Jakub Jermar <jakub@…>, 19 years ago

A quote from from SPARC V9 specification:

The Y register is deprecated; it is provided only for compatibility with previous versions
of the architecture. It should not be used in new SPARC-V9 software. It is
recommended that all instructions that reference the Y register (i.e., SMUL,
SMULcc, UMUL, UMULcc, MULScc, SDIV, SDIVcc, UDIV, UDIVcc, RDY, and
WRY) be avoided. See the appropriate pages in Appendix A, “Instruction Definitions,”
for suitable substitute instructions.

Still gcc is generating code which uses Y and some of the instructions above.
This change modifies the preemptible_handler() to preserve the Y register
across preemption.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*
2 * Copyright (C) 2005 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup sparc64interrupt
30 * @{
31 */
32/** @file
33 */
34
35#ifndef KERN_sparc64_TRAP_TABLE_H_
36#define KERN_sparc64_TRAP_TABLE_H_
37
38#include <arch/stack.h>
39
40#define TRAP_TABLE_ENTRY_COUNT 1024
41#define TRAP_TABLE_ENTRY_SIZE 32
42#define TRAP_TABLE_SIZE (TRAP_TABLE_ENTRY_COUNT*TRAP_TABLE_ENTRY_SIZE)
43
44#ifndef __ASM__
45
46#include <arch/types.h>
47
48struct trap_table_entry {
49 uint8_t octets[TRAP_TABLE_ENTRY_SIZE];
50} __attribute__ ((packed));
51
52typedef struct trap_table_entry trap_table_entry_t;
53
54extern trap_table_entry_t trap_table[TRAP_TABLE_ENTRY_COUNT];
55extern trap_table_entry_t trap_table_save[TRAP_TABLE_ENTRY_COUNT];
56#endif /* !__ASM__ */
57
58#ifdef __ASM__
59.macro SAVE_GLOBALS
60 mov %g1, %l1
61 mov %g2, %l2
62 mov %g3, %l3
63 mov %g4, %l4
64 mov %g5, %l5
65 mov %g6, %l6
66 mov %g7, %l7
67.endm
68
69.macro RESTORE_GLOBALS
70 mov %l1, %g1
71 mov %l2, %g2
72 mov %l3, %g3
73 mov %l4, %g4
74 mov %l5, %g5
75 mov %l6, %g6
76 mov %l7, %g7
77.endm
78
79/*
80 * The following needs to be in sync with the
81 * definition of the istate structure.
82 */
83#define PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE (STACK_WINDOW_SAVE_AREA_SIZE+(12*8))
84#define SAVED_TSTATE -(1*8)
85#define SAVED_TPC -(2*8)
86#define SAVED_TNPC -(3*8) /* <-- istate_t begins here */
87#define SAVED_Y -(4*8)
88#define SAVED_I0 -(5*8)
89#define SAVED_I1 -(6*8)
90#define SAVED_I2 -(7*8)
91#define SAVED_I3 -(8*8)
92#define SAVED_I4 -(9*8)
93#define SAVED_I5 -(10*8)
94#define SAVED_I6 -(11*8)
95#define SAVED_I7 -(12*8)
96
97.macro PREEMPTIBLE_HANDLER f
98 sethi %hi(\f), %g1
99 b preemptible_handler
100 or %g1, %lo(\f), %g1
101.endm
102
103#endif /* __ASM__ */
104
105#endif
106
107/** @}
108 */
Note: See TracBrowser for help on using the repository browser.