linux/arch/m68k/fpsp040/x_unimp.S
<<
>>
Prefs
   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|       For details on the license for this file, please see the
  26|       file, README, in this same directory.
  27
  28X_UNIMP:        |idnt    2,1 | Motorola 040 Floating Point Software Package
  29
  30        |section        8
  31
  32#include "fpsp.h"
  33
  34        |xref   get_op
  35        |xref   do_func
  36        |xref   sto_res
  37        |xref   gen_except
  38        |xref   fpsp_fmt_error
  39
  40        .global fpsp_unimp
  41        .global uni_2
  42fpsp_unimp:
  43        link            %a6,#-LOCAL_SIZE
  44        fsave           -(%a7)
  45uni_2:
  46        moveml          %d0-%d1/%a0-%a1,USER_DA(%a6)
  47        fmovemx %fp0-%fp3,USER_FP0(%a6)
  48        fmoveml %fpcr/%fpsr/%fpiar,USER_FPCR(%a6)
  49        moveb           (%a7),%d0               |test for valid version num
  50        andib           #0xf0,%d0               |test for $4x
  51        cmpib           #VER_4,%d0      |must be $4x or exit
  52        bnel            fpsp_fmt_error
  53|
  54|       Temporary D25B Fix
  55|       The following lines are used to ensure that the FPSR
  56|       exception byte and condition codes are clear before proceeding
  57|
  58        movel           USER_FPSR(%a6),%d0
  59        andl            #0xFF00FF,%d0   |clear all but accrued exceptions
  60        movel           %d0,USER_FPSR(%a6)
  61        fmovel          #0,%FPSR |clear all user bits
  62        fmovel          #0,%FPCR        |clear all user exceptions for FPSP
  63
  64        clrb            UFLG_TMP(%a6)   |clr flag for unsupp data
  65
  66        bsrl            get_op          |go get operand(s)
  67        clrb            STORE_FLG(%a6)
  68        bsrl            do_func         |do the function
  69        fsave           -(%a7)          |capture possible exc state
  70        tstb            STORE_FLG(%a6)
  71        bnes            no_store        |if STORE_FLG is set, no store
  72        bsrl            sto_res         |store the result in user space
  73no_store:
  74        bral            gen_except      |post any exceptions and return
  75
  76        |end
  77