source: rtems/c/src/lib/libcpu/m68k/m68040/fpsp/x_unimp.s @ 1d320bac

4.104.114.84.95
Last change on this file since 1d320bac was 1d320bac, checked in by Joel Sherrill <joel.sherrill@…>, on 07/09/97 at 23:41:20

This code was in the tree but not actually being compiled. There
were a number of minor problems which had to be fixed to get it
to compile including modifying the compile rule to handle C++ comments,
changing the syntax of the include statement, and getting rid of "%"
as part of register names.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1//
2//      x_unimp.sa 3.3 7/1/91
3//
4//      fpsp_unimp --- FPSP handler for unimplemented instruction       
5//      exception.
6//
7// Invoked when the user program encounters a floating-point
8// op-code that hardware does not support.  Trap vector# 11
9// (See table 8-1 MC68030 User's Manual).
10//
11//
12// Note: An fsave for an unimplemented inst. will create a short
13// fsave stack.
14//
15//  Input: 1. Six word stack frame for unimplemented inst, four word
16//            for illegal
17//            (See table 8-7 MC68030 User's Manual).
18//         2. Unimp (short) fsave state frame created here by fsave
19//            instruction.
20//
21//
22//              Copyright (C) Motorola, Inc. 1990
23//                      All Rights Reserved
24//
25//      THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
26//      The copyright notice above does not evidence any 
27//      actual or intended publication of such source code.
28
29X_UNIMP:        //idnt    2,1 | Motorola 040 Floating Point Software Package
30
31        |section        8
32
33#include "fpsp.defs"
34
35        |xref   get_op
36        |xref   do_func
37        |xref   sto_res
38        |xref   gen_except
39        |xref   fpsp_fmt_error
40
41        .global fpsp_unimp
42        .global uni_2
43fpsp_unimp:
44        link            %a6,#-LOCAL_SIZE
45        fsave           -(%a7)
46uni_2:
47        moveml          %d0-%d1/%a0-%a1,USER_DA(%a6)
48        fmovemx %fp0-%fp3,USER_FP0(%a6)
49        fmoveml %fpcr/%fpsr/%fpiar,USER_FPCR(%a6)
50        moveb           (%a7),%d0               //test for valid version num
51        andib           #0xf0,%d0               //test for $4x
52        cmpib           #VER_4,%d0      //must be $4x or exit
53        bnel            fpsp_fmt_error
54//
55//      Temporary D25B Fix
56//      The following lines are used to ensure that the FPSR
57//      exception byte and condition codes are clear before proceeding
58//
59        movel           USER_FPSR(%a6),%d0
60        andl            #0xFF00FF,%d0   //clear all but accrued exceptions
61        movel           %d0,USER_FPSR(%a6)
62        fmovel          #0,%FPSR //clear all user bits
63        fmovel          #0,%FPCR        //clear all user exceptions for FPSP
64
65        clrb            UFLG_TMP(%a6)   //clr flag for unsupp data
66
67        bsrl            get_op          //go get operand(s)
68        clrb            STORE_FLG(%a6)
69        bsrl            do_func         //do the function
70        fsave           -(%a7)          //capture possible exc state
71        tstb            STORE_FLG(%a6)
72        bnes            no_store        //if STORE_FLG is set, no store
73        bsrl            sto_res         //store the result in user space
74no_store:
75        bral            gen_except      //post any exceptions and return
76
77        |end
Note: See TracBrowser for help on using the repository browser.