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

4.104.114.84.95
Last change on this file since f9b93da was f9b93da, checked in by Joel Sherrill <joel.sherrill@…>, on 04/16/97 at 17:33:04

Added the MC68040 Floating Point Support Package. This was ported
to RTEMS by Eric Norum. It is freely distributable and was acquired
from the Motorola WWW site. More info is in the FPSP README.

  • 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.