Changeset 34d9469e in mainline


Ignore:
Timestamp:
2006-09-13T14:12:58Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
da02e69
Parents:
6eabb6e6
Message:

More sparc64 FPU trap handlers.

Location:
kernel/arch/sparc64
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/include/trap/exception.h

    r6eabb6e6 r34d9469e  
    4141#define TT_ILLEGAL_INSTRUCTION                  0x10
    4242#define TT_PRIVILEGED_OPCODE                    0x11
     43#define TT_UNIMPLEMENTED_LDD                    0x12
     44#define TT_UNIMPLEMENTED_STD                    0x13
    4345#define TT_FP_DISABLED                          0x20
     46#define TT_FP_EXCEPTION_IEEE_754                0x21
     47#define TT_FP_EXCEPTION_OTHER                   0x22
     48#define TT_TAG_OVERFLOW                         0x23
    4449#define TT_DIVISION_BY_ZERO                     0x28
    4550#define TT_DATA_ACCESS_EXCEPTION                0x30
    4651#define TT_DATA_ACCESS_ERROR                    0x32
    4752#define TT_MEM_ADDRESS_NOT_ALIGNED              0x34
    48 #define TT_PRIVILEGED_ACTION                    0x38
     53#define TT_LDDF_MEM_ADDRESS_NOT_ALIGNED         0x35
     54#define TT_STDF_MEM_ADDRESS_NOT_ALIGNED         0x36
     55#define TT_PRIVILEGED_ACTION                    0x37
     56#define TT_LDQF_MEM_ADDRESS_NOT_ALIGNED         0x38
     57#define TT_STQF_MEM_ADDRESS_NOT_ALIGNED         0x39
    4958
    5059#ifndef __ASM__
     
    5867extern void illegal_instruction(int n, istate_t *istate);
    5968extern void privileged_opcode(int n, istate_t *istate);
     69extern void unimplemented_LDD(int n, istate_t *istate);
     70extern void unimplemented_STD(int n, istate_t *istate);
    6071extern void fp_disabled(int n, istate_t *istate);
     72extern void fp_exception_ieee_754(int n, istate_t *istate);
     73extern void fp_exception_other(int n, istate_t *istate);
     74extern void tag_overflow(int n, istate_t *istate);
    6175extern void division_by_zero(int n, istate_t *istate);
    6276extern void data_access_exception(int n, istate_t *istate);
    6377extern void data_access_error(int n, istate_t *istate);
    6478extern void mem_address_not_aligned(int n, istate_t *istate);
     79extern void LDDF_mem_address_not_aligned(int n, istate_t *istate);
     80extern void STDF_mem_address_not_aligned(int n, istate_t *istate);
    6581extern void privileged_action(int n, istate_t *istate);
    66 
     82extern void LDQF_mem_address_not_aligned(int n, istate_t *istate);
     83extern void STQF_mem_address_not_aligned(int n, istate_t *istate);
    6784
    6885#endif /* !__ASM__ */
  • kernel/arch/sparc64/src/trap/exception.c

    r6eabb6e6 r34d9469e  
    8383}
    8484
     85/** Handle unimplemented_LDD. (0x12) */
     86void unimplemented_LDD(int n, istate_t *istate)
     87{
     88        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     89        dump_istate(istate);
     90        panic("%s\n", __FUNCTION__);
     91}
     92
     93/** Handle unimplemented_STD. (0x13) */
     94void unimplemented_STD(int n, istate_t *istate)
     95{
     96        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     97        dump_istate(istate);
     98        panic("%s\n", __FUNCTION__);
     99}
     100
    85101/** Handle fp_disabled. (0x20) */
    86102void fp_disabled(int n, istate_t *istate)
     
    104120}
    105121
     122/** Handle fp_exception_ieee_754. (0x21) */
     123void fp_exception_ieee_754(int n, istate_t *istate)
     124{
     125        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     126        dump_istate(istate);
     127        panic("%s\n", __FUNCTION__);
     128}
     129
     130/** Handle fp_exception_other. (0x22) */
     131void fp_exception_other(int n, istate_t *istate)
     132{
     133        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     134        dump_istate(istate);
     135        panic("%s\n", __FUNCTION__);
     136}
     137
     138/** Handle tag_overflow. (0x23) */
     139void tag_overflow(int n, istate_t *istate)
     140{
     141        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     142        dump_istate(istate);
     143        panic("%s\n", __FUNCTION__);
     144}
     145
    106146/** Handle division_by_zero. (0x28) */
    107147void division_by_zero(int n, istate_t *istate)
     
    136176}
    137177
     178/** Handle LDDF_mem_address_not_aligned. (0x35) */
     179void LDDF_mem_address_not_aligned(int n, istate_t *istate)
     180{
     181        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     182        dump_istate(istate);
     183        panic("%s\n", __FUNCTION__);
     184}
     185
     186/** Handle STDF_mem_address_not_aligned. (0x36) */
     187void STDF_mem_address_not_aligned(int n, istate_t *istate)
     188{
     189        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     190        dump_istate(istate);
     191        panic("%s\n", __FUNCTION__);
     192}
     193
    138194/** Handle privileged_action. (0x37) */
    139195void privileged_action(int n, istate_t *istate)
     
    144200}
    145201
     202/** Handle LDQF_mem_address_not_aligned. (0x38) */
     203void LDQF_mem_address_not_aligned(int n, istate_t *istate)
     204{
     205        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     206        dump_istate(istate);
     207        panic("%s\n", __FUNCTION__);
     208}
     209
     210/** Handle STQF_mem_address_not_aligned. (0x39) */
     211void STQF_mem_address_not_aligned(int n, istate_t *istate)
     212{
     213        fault_if_from_uspace(istate, "%s\n", __FUNCTION__);
     214        dump_istate(istate);
     215        panic("%s\n", __FUNCTION__);
     216}
     217
    146218/** @}
    147219 */
  • kernel/arch/sparc64/src/trap/trap_table.S

    r6eabb6e6 r34d9469e  
    8383        PREEMPTIBLE_HANDLER privileged_opcode
    8484
     85/* TT = 0x12, TL = 0, unimplemented_LDD */
     86.org trap_table + TT_UNIMPLEMENTED_LDD*ENTRY_SIZE
     87.global unimplemented_LDD_tl0
     88unimplemented_LDD_tl0:
     89        PREEMPTIBLE_HANDLER unimplemented_LDD
     90
     91/* TT = 0x13, TL = 0, unimplemented_STD */
     92.org trap_table + TT_UNIMPLEMENTED_STD*ENTRY_SIZE
     93.global unimplemented_STD_tl0
     94unimplemented_STD_tl0:
     95        PREEMPTIBLE_HANDLER unimplemented_STD
     96
    8597/* TT = 0x20, TL = 0, fb_disabled handler */
    8698.org trap_table + TT_FP_DISABLED*ENTRY_SIZE
     
    88100fp_disabled_tl0:
    89101        PREEMPTIBLE_HANDLER fp_disabled
     102
     103/* TT = 0x21, TL = 0, fb_exception_ieee_754 handler */
     104.org trap_table + TT_FP_EXCEPTION_IEEE_754*ENTRY_SIZE
     105.global fb_exception_ieee_754_tl0
     106fp_exception_ieee_754_tl0:
     107        PREEMPTIBLE_HANDLER fp_exception_ieee_754
     108
     109/* TT = 0x22, TL = 0, fb_exception_other handler */
     110.org trap_table + TT_FP_EXCEPTION_OTHER*ENTRY_SIZE
     111.global fb_exception_other_tl0
     112fp_exception_other_tl0:
     113        PREEMPTIBLE_HANDLER fp_exception_other
     114
     115/* TT = 0x23, TL = 0, tag_overflow */
     116.org trap_table + TT_TAG_OVERFLOW*ENTRY_SIZE
     117.global tag_overflow_tl0
     118tag_overflow_tl0:
     119        PREEMPTIBLE_HANDLER tag_overflow
    90120
    91121/* TT = 0x24, TL = 0, clean_window handler */
     
    120150        PREEMPTIBLE_HANDLER mem_address_not_aligned
    121151
    122 /* TT = 0x38, TL = 0, privileged_action */
     152/* TT = 0x35, TL = 0, LDDF_mem_address_not_aligned */
     153.org trap_table + TT_LDDF_MEM_ADDRESS_NOT_ALIGNED*ENTRY_SIZE
     154.global LDDF_mem_address_not_aligned_tl0
     155LDDF_mem_address_not_aligned_tl0:
     156        PREEMPTIBLE_HANDLER LDDF_mem_address_not_aligned
     157
     158/* TT = 0x36, TL = 0, STDF_mem_address_not_aligned */
     159.org trap_table + TT_STDF_MEM_ADDRESS_NOT_ALIGNED*ENTRY_SIZE
     160.global STDF_mem_address_not_aligned_tl0
     161STDF_mem_address_not_aligned_tl0:
     162        PREEMPTIBLE_HANDLER STDF_mem_address_not_aligned
     163
     164/* TT = 0x37, TL = 0, privileged_action */
    123165.org trap_table + TT_PRIVILEGED_ACTION*ENTRY_SIZE
    124166.global privileged_action_tl0
    125167privileged_action_tl0:
    126168        PREEMPTIBLE_HANDLER privileged_action
     169
     170/* TT = 0x38, TL = 0, LDQF_mem_address_not_aligned */
     171.org trap_table + TT_LDQF_MEM_ADDRESS_NOT_ALIGNED*ENTRY_SIZE
     172.global LDQF_mem_address_not_aligned_tl0
     173LDQF_mem_address_not_aligned_tl0:
     174        PREEMPTIBLE_HANDLER LDQF_mem_address_not_aligned
     175
     176/* TT = 0x39, TL = 0, STQF_mem_address_not_aligned */
     177.org trap_table + TT_STQF_MEM_ADDRESS_NOT_ALIGNED*ENTRY_SIZE
     178.global STQF_mem_address_not_aligned_tl0
     179STQF_mem_address_not_aligned_tl0:
     180        PREEMPTIBLE_HANDLER STQF_mem_address_not_aligned
    127181
    128182/* TT = 0x41, TL = 0, interrupt_level_1 handler */
Note: See TracChangeset for help on using the changeset viewer.