[BACK]Return to gen_except.sa CVS log [TXT][DIR] Up to [local] / sys / arch / m68k / fpsp

Annotation of sys/arch/m68k/fpsp/gen_except.sa, Revision 1.1.1.1

1.1       nbrk        1: *      $OpenBSD: gen_except.sa,v 1.2 1996/05/29 21:05:29 niklas Exp $
                      2: *      $NetBSD: gen_except.sa,v 1.3 1994/10/26 07:49:07 cgd Exp $
                      3:
                      4: *      MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
                      5: *      M68000 Hi-Performance Microprocessor Division
                      6: *      M68040 Software Package
                      7: *
                      8: *      M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc.
                      9: *      All rights reserved.
                     10: *
                     11: *      THE SOFTWARE is provided on an "AS IS" basis and without warranty.
                     12: *      To the maximum extent permitted by applicable law,
                     13: *      MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
                     14: *      INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
                     15: *      PARTICULAR PURPOSE and any warranty against infringement with
                     16: *      regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
                     17: *      and any accompanying written materials.
                     18: *
                     19: *      To the maximum extent permitted by applicable law,
                     20: *      IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
                     21: *      (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
                     22: *      PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR
                     23: *      OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE
                     24: *      SOFTWARE.  Motorola assumes no responsibility for the maintenance
                     25: *      and support of the SOFTWARE.
                     26: *
                     27: *      You are hereby granted a copyright license to use, modify, and
                     28: *      distribute the SOFTWARE so long as this entire notice is retained
                     29: *      without alteration in any modified and/or redistributed versions,
                     30: *      and that such modified versions are clearly identified as such.
                     31: *      No licenses are granted by implication, estoppel or otherwise
                     32: *      under any patents or trademarks of Motorola, Inc.
                     33:
                     34: *
                     35: *      gen_except.sa 3.7 1/16/92
                     36: *
                     37: *      gen_except --- FPSP routine to detect reportable exceptions
                     38: *
                     39: *      This routine compares the exception enable byte of the
                     40: *      user_fpcr on the stack with the exception status byte
                     41: *      of the user_fpsr.
                     42: *
                     43: *      Any routine which may report an exceptions must load
                     44: *      the stack frame in memory with the exceptional operand(s).
                     45: *
                     46: *      Priority for exceptions is:
                     47: *
                     48: *      Highest:        bsun
                     49: *                      snan
                     50: *                      operr
                     51: *                      ovfl
                     52: *                      unfl
                     53: *                      dz
                     54: *                      inex2
                     55: *      Lowest:         inex1
                     56: *
                     57: *      Note: The IEEE standard specifies that inex2 is to be
                     58: *      reported if ovfl occurs and the ovfl enable bit is not
                     59: *      set but the inex2 enable bit is.
                     60: *
                     61:
                     62: GEN_EXCEPT    IDNT    2,1 Motorola 040 Floating Point Software Package
                     63:
                     64:        section 8
                     65:
                     66:        include fpsp.h
                     67:
                     68:        xref    real_trace
                     69:        xref    fpsp_done
                     70:        xref    fpsp_fmt_error
                     71:
                     72: exc_tbl:
                     73:        dc.l    bsun_exc
                     74:        dc.l    commonE1
                     75:        dc.l    commonE1
                     76:        dc.l    ovfl_unfl
                     77:        dc.l    ovfl_unfl
                     78:        dc.l    commonE1
                     79:        dc.l    commonE3
                     80:        dc.l    commonE3
                     81:        dc.l    no_match
                     82:
                     83:        xdef    gen_except
                     84: gen_except:
                     85:        cmpi.b  #IDLE_SIZE-4,1(a7)      ;test for idle frame
                     86:        beq.w   do_check                ;go handle idle frame
                     87:        cmpi.b  #UNIMP_40_SIZE-4,1(a7)  ;test for orig unimp frame
                     88:        beq.b   unimp_x                 ;go handle unimp frame
                     89:        cmpi.b  #UNIMP_41_SIZE-4,1(a7)  ;test for rev unimp frame
                     90:        beq.b   unimp_x                 ;go handle unimp frame
                     91:        cmpi.b  #BUSY_SIZE-4,1(a7)      ;if size <> $60, fmt error
                     92:        bne.l   fpsp_fmt_error
                     93:        lea.l   BUSY_SIZE+LOCAL_SIZE(a7),a1 ;init a1 so fpsp.h
                     94: *                                      ;equates will work
                     95: * Fix up the new busy frame with entries from the unimp frame
                     96: *
                     97:        move.l  ETEMP_EX(a6),ETEMP_EX(a1) ;copy etemp from unimp
                     98:        move.l  ETEMP_HI(a6),ETEMP_HI(a1) ;frame to busy frame
                     99:        move.l  ETEMP_LO(a6),ETEMP_LO(a1)
                    100:        move.l  CMDREG1B(a6),CMDREG1B(a1) ;set inst in frame to unimp
                    101:        move.l  CMDREG1B(a6),d0         ;fix cmd1b to make it
                    102:        and.l   #$03c30000,d0           ;work for cmd3b
                    103:        bfextu  CMDREG1B(a6){13:1},d1   ;extract bit 2
                    104:        lsl.l   #5,d1
                    105:        swap    d1
                    106:        or.l    d1,d0                   ;put it in the right place
                    107:        bfextu  CMDREG1B(a6){10:3},d1   ;extract bit 3,4,5
                    108:        lsl.l   #2,d1
                    109:        swap    d1
                    110:        or.l    d1,d0                   ;put them in the right place
                    111:        move.l  d0,CMDREG3B(a1)         ;in the busy frame
                    112: *
                    113: * Or in the FPSR from the emulation with the USER_FPSR on the stack.
                    114: *
                    115:        fmove.l FPSR,d0
                    116:        or.l    d0,USER_FPSR(a6)
                    117:        move.l  USER_FPSR(a6),FPSR_SHADOW(a1) ;set exc bits
                    118:        or.l    #sx_mask,E_BYTE(a1)
                    119:        bra     do_clean
                    120:
                    121: *
                    122: * Frame is an unimp frame possible resulting from an fmove <ea>,fp0
                    123: * that caused an exception
                    124: *
                    125: * a1 is modified to point into the new frame allowing fpsp equates
                    126: * to be valid.
                    127: *
                    128: unimp_x:
                    129:        cmpi.b  #UNIMP_40_SIZE-4,1(a7)  ;test for orig unimp frame
                    130:        bne.b   test_rev
                    131:        lea.l   UNIMP_40_SIZE+LOCAL_SIZE(a7),a1
                    132:        bra.b   unimp_con
                    133: test_rev:
                    134:        cmpi.b  #UNIMP_41_SIZE-4,1(a7)  ;test for rev unimp frame
                    135:        bne.l   fpsp_fmt_error          ;if not $28 or $30
                    136:        lea.l   UNIMP_41_SIZE+LOCAL_SIZE(a7),a1
                    137:
                    138: unimp_con:
                    139: *
                    140: * Fix up the new unimp frame with entries from the old unimp frame
                    141: *
                    142:        move.l  CMDREG1B(a6),CMDREG1B(a1) ;set inst in frame to unimp
                    143: *
                    144: * Or in the FPSR from the emulation with the USER_FPSR on the stack.
                    145: *
                    146:        fmove.l FPSR,d0
                    147:        or.l    d0,USER_FPSR(a6)
                    148:        bra     do_clean
                    149:
                    150: *
                    151: * Frame is idle, so check for exceptions reported through
                    152: * USER_FPSR and set the unimp frame accordingly.
                    153: * A7 must be incremented to the point before the
                    154: * idle fsave vector to the unimp vector.
                    155: *
                    156:
                    157: do_check:
                    158:        add.l   #4,A7                   ;point A7 back to unimp frame
                    159: *
                    160: * Or in the FPSR from the emulation with the USER_FPSR on the stack.
                    161: *
                    162:        fmove.l FPSR,d0
                    163:        or.l    d0,USER_FPSR(a6)
                    164: *
                    165: * On a busy frame, we must clear the nmnexc bits.
                    166: *
                    167:        cmpi.b  #BUSY_SIZE-4,1(a7)      ;check frame type
                    168:        bne.b   check_fr                ;if busy, clr nmnexc
                    169:        clr.w   NMNEXC(a6)              ;clr nmnexc & nmcexc
                    170:        btst.b  #5,CMDREG1B(a6)         ;test for fmove out
                    171:        bne.b   frame_com
                    172:        move.l  USER_FPSR(a6),FPSR_SHADOW(a6) ;set exc bits
                    173:        or.l    #sx_mask,E_BYTE(a6)
                    174:        bra.b   frame_com
                    175: check_fr:
                    176:        cmp.b   #UNIMP_40_SIZE-4,1(a7)
                    177:        beq.b   frame_com
                    178:        clr.w   NMNEXC(a6)
                    179: frame_com:
                    180:        move.b  FPCR_ENABLE(a6),d0      ;get fpcr enable byte
                    181:        and.b   FPSR_EXCEPT(a6),d0      ;and in the fpsr exc byte
                    182:        bfffo   d0{24:8},d1             ;test for first set bit
                    183:        lea.l   exc_tbl,a0              ;load jmp table address
                    184:        subi.b  #24,d1                  ;normalize bit offset to 0-8
                    185:        move.l  (a0,d1.w*4),a0          ;load routine address based
                    186: *                                      ;based on first enabled exc
                    187:        jmp     (a0)                    ;jump to routine
                    188: *
                    189: * Bsun is not possible in unimp or unsupp
                    190: *
                    191: bsun_exc:
                    192:        bra     do_clean
                    193: *
                    194: * The typical work to be done to the unimp frame to report an
                    195: * exception is to set the E1/E3 byte and clr the U flag.
                    196: * commonE1 does this for E1 exceptions, which are snan,
                    197: * operr, and dz.  commonE3 does this for E3 exceptions, which
                    198: * are inex2 and inex1, and also clears the E1 exception bit
                    199: * left over from the unimp exception.
                    200: *
                    201: commonE1:
                    202:        bset.b  #E1,E_BYTE(a6)          ;set E1 flag
                    203:        bra.w   commonE                 ;go clean and exit
                    204:
                    205: commonE3:
                    206:        tst.b   UFLG_TMP(a6)            ;test flag for unsup/unimp state
                    207:        bne.b   unsE3
                    208: uniE3:
                    209:        bset.b  #E3,E_BYTE(a6)          ;set E3 flag
                    210:        bclr.b  #E1,E_BYTE(a6)          ;clr E1 from unimp
                    211:        bra.w   commonE
                    212:
                    213: unsE3:
                    214:        tst.b   RES_FLG(a6)
                    215:        bne.b   unsE3_0
                    216: unsE3_1:
                    217:        bset.b  #E3,E_BYTE(a6)          ;set E3 flag
                    218: unsE3_0:
                    219:        bclr.b  #E1,E_BYTE(a6)          ;clr E1 flag
                    220:        move.l  CMDREG1B(a6),d0
                    221:        and.l   #$03c30000,d0           ;work for cmd3b
                    222:        bfextu  CMDREG1B(a6){13:1},d1   ;extract bit 2
                    223:        lsl.l   #5,d1
                    224:        swap    d1
                    225:        or.l    d1,d0                   ;put it in the right place
                    226:        bfextu  CMDREG1B(a6){10:3},d1   ;extract bit 3,4,5
                    227:        lsl.l   #2,d1
                    228:        swap    d1
                    229:        or.l    d1,d0                   ;put them in the right place
                    230:        move.l  d0,CMDREG3B(a6)         ;in the busy frame
                    231:
                    232: commonE:
                    233:        bclr.b  #UFLAG,T_BYTE(a6)       ;clr U flag from unimp
                    234:        bra.w   do_clean                ;go clean and exit
                    235: *
                    236: * No bits in the enable byte match existing exceptions.  Check for
                    237: * the case of the ovfl exc without the ovfl enabled, but with
                    238: * inex2 enabled.
                    239: *
                    240: no_match:
                    241:        btst.b  #inex2_bit,FPCR_ENABLE(a6) ;check for ovfl/inex2 case
                    242:        beq.b   no_exc                  ;if clear, exit
                    243:        btst.b  #ovfl_bit,FPSR_EXCEPT(a6) ;now check ovfl
                    244:        beq.b   no_exc                  ;if clear, exit
                    245:        bra.b   ovfl_unfl               ;go to unfl_ovfl to determine if
                    246: *                                      ;it is an unsupp or unimp exc
                    247:
                    248: * No exceptions are to be reported.  If the instruction was
                    249: * unimplemented, no FPU restore is necessary.  If it was
                    250: * unsupported, we must perform the restore.
                    251: no_exc:
                    252:        tst.b   UFLG_TMP(a6)    ;test flag for unsupp/unimp state
                    253:        beq.b   uni_no_exc
                    254: uns_no_exc:
                    255:        tst.b   RES_FLG(a6)     ;check if frestore is needed
                    256:        bne.w   do_clean        ;if clear, no frestore needed
                    257: uni_no_exc:
                    258:        movem.l USER_DA(a6),d0-d1/a0-a1
                    259:        fmovem.x USER_FP0(a6),fp0-fp3
                    260:        fmovem.l USER_FPCR(a6),fpcr/fpsr/fpiar
                    261:        unlk    a6
                    262:        bra     finish_up
                    263: *
                    264: * Unsupported Data Type Handler:
                    265: * Ovfl:
                    266: *   An fmoveout that results in an overflow is reported this way.
                    267: * Unfl:
                    268: *   An fmoveout that results in an underflow is reported this way.
                    269: *
                    270: * Unimplemented Instruction Handler:
                    271: * Ovfl:
                    272: *   Only scosh, setox, ssinh, stwotox, and scale can set overflow in
                    273: *   this manner.
                    274: * Unfl:
                    275: *   Stwotox, setox, and scale can set underflow in this manner.
                    276: *   Any of the other Library Routines such that f(x)=x in which
                    277: *   x is an extended denorm can report an underflow exception.
                    278: *   It is the responsibility of the exception-causing exception
                    279: *   to make sure that WBTEMP is correct.
                    280: *
                    281: *   The exceptional operand is in FP_SCR1.
                    282: *
                    283: ovfl_unfl:
                    284:        tst.b   UFLG_TMP(a6)    ;test flag for unsupp/unimp state
                    285:        beq.b   ofuf_con
                    286: *
                    287: * The caller was from an unsupported data type trap.  Test if the
                    288: * caller set CU_ONLY.  If so, the exceptional operand is expected in
                    289: * FPTEMP, rather than WBTEMP.
                    290: *
                    291:        tst.b   CU_ONLY(a6)             ;test if inst is cu-only
                    292:        beq.w   unsE3
                    293: *      move.w  #$fe,CU_SAVEPC(a6)
                    294:        clr.b   CU_SAVEPC(a6)
                    295:        bset.b  #E1,E_BYTE(a6)          ;set E1 exception flag
                    296:        move.w  ETEMP_EX(a6),FPTEMP_EX(a6)
                    297:        move.l  ETEMP_HI(a6),FPTEMP_HI(a6)
                    298:        move.l  ETEMP_LO(a6),FPTEMP_LO(a6)
                    299:        bset.b  #fptemp15_bit,DTAG(a6)  ;set fpte15
                    300:        bclr.b  #UFLAG,T_BYTE(a6)       ;clr U flag from unimp
                    301:        bra.w   do_clean                ;go clean and exit
                    302:
                    303: ofuf_con:
                    304:        move.b  (a7),VER_TMP(a6)        ;save version number
                    305:        cmpi.b  #BUSY_SIZE-4,1(a7)      ;check for busy frame
                    306:        beq.b   busy_fr                 ;if unimp, grow to busy
                    307:        cmpi.b  #VER_40,(a7)            ;test for orig unimp frame
                    308:        bne.b   try_41                  ;if not, test for rev frame
                    309:        moveq.l #13,d0                  ;need to zero 14 lwords
                    310:        bra.b   ofuf_fin
                    311: try_41:
                    312:        cmpi.b  #VER_41,(a7)            ;test for rev unimp frame
                    313:        bne.l   fpsp_fmt_error          ;if neither, exit with error
                    314:        moveq.l #11,d0                  ;need to zero 12 lwords
                    315:
                    316: ofuf_fin:
                    317:        clr.l   (a7)
                    318: loop1:
                    319:        clr.l   -(a7)                   ;clear and dec a7
                    320:        dbra.w  d0,loop1
                    321:        move.b  VER_TMP(a6),(a7)
                    322:        move.b  #BUSY_SIZE-4,1(a7)              ;write busy fmt word.
                    323: busy_fr:
                    324:        move.l  FP_SCR1(a6),WBTEMP_EX(a6)       ;write
                    325:        move.l  FP_SCR1+4(a6),WBTEMP_HI(a6)     ;execptional op to
                    326:        move.l  FP_SCR1+8(a6),WBTEMP_LO(a6)     ;wbtemp
                    327:        bset.b  #E3,E_BYTE(a6)                  ;set E3 flag
                    328:        bclr.b  #E1,E_BYTE(a6)                  ;make sure E1 is clear
                    329:        bclr.b  #UFLAG,T_BYTE(a6)               ;clr U flag
                    330:        move.l  USER_FPSR(a6),FPSR_SHADOW(a6)
                    331:        or.l    #sx_mask,E_BYTE(a6)
                    332:        move.l  CMDREG1B(a6),d0         ;fix cmd1b to make it
                    333:        and.l   #$03c30000,d0           ;work for cmd3b
                    334:        bfextu  CMDREG1B(a6){13:1},d1   ;extract bit 2
                    335:        lsl.l   #5,d1
                    336:        swap    d1
                    337:        or.l    d1,d0                   ;put it in the right place
                    338:        bfextu  CMDREG1B(a6){10:3},d1   ;extract bit 3,4,5
                    339:        lsl.l   #2,d1
                    340:        swap    d1
                    341:        or.l    d1,d0                   ;put them in the right place
                    342:        move.l  d0,CMDREG3B(a6)         ;in the busy frame
                    343:
                    344: *
                    345: * Check if the frame to be restored is busy or unimp.
                    346: *** NOTE *** Bug fix for errata (0d43b #3)
                    347: * If the frame is unimp, we must create a busy frame to
                    348: * fix the bug with the nmnexc bits in cases in which they
                    349: * are set by a previous instruction and not cleared by
                    350: * the save. The frame will be unimp only if the final
                    351: * instruction in an emulation routine caused the exception
                    352: * by doing an fmove <ea>,fp0.  The exception operand, in
                    353: * internal format, is in fptemp.
                    354: *
                    355: do_clean:
                    356:        cmpi.b  #UNIMP_40_SIZE-4,1(a7)
                    357:        bne.b   do_con
                    358:        moveq.l #13,d0                  ;in orig, need to zero 14 lwords
                    359:        bra.b   do_build
                    360: do_con:
                    361:        cmpi.b  #UNIMP_41_SIZE-4,1(a7)
                    362:        bne.b   do_restore              ;frame must be busy
                    363:        moveq.l #11,d0                  ;in rev, need to zero 12 lwords
                    364:
                    365: do_build:
                    366:        move.b  (a7),VER_TMP(a6)
                    367:        clr.l   (a7)
                    368: loop2:
                    369:        clr.l   -(a7)                   ;clear and dec a7
                    370:        dbra.w  d0,loop2
                    371: *
                    372: * Use a1 as pointer into new frame.  a6 is not correct if an unimp or
                    373: * busy frame was created as the result of an exception on the final
                    374: * instruction of an emulation routine.
                    375: *
                    376: * We need to set the nmcexc bits if the exception is E1. Otherwise,
                    377: * the exc taken will be inex2.
                    378: *
                    379:        lea.l   BUSY_SIZE+LOCAL_SIZE(a7),a1     ;init a1 for new frame
                    380:        move.b  VER_TMP(a6),(a7)        ;write busy fmt word
                    381:        move.b  #BUSY_SIZE-4,1(a7)
                    382:        move.l  FP_SCR1(a6),WBTEMP_EX(a1)       ;write
                    383:        move.l  FP_SCR1+4(a6),WBTEMP_HI(a1)     ;exceptional op to
                    384:        move.l  FP_SCR1+8(a6),WBTEMP_LO(a1)     ;wbtemp
                    385: *      btst.b  #E1,E_BYTE(a1)
                    386: *      beq.b   do_restore
                    387:        bfextu  USER_FPSR(a6){17:4},d0  ;get snan/operr/ovfl/unfl bits
                    388:        bfins   d0,NMCEXC(a1){4:4}      ;and insert them in nmcexc
                    389:        move.l  USER_FPSR(a6),FPSR_SHADOW(a1) ;set exc bits
                    390:        or.l    #sx_mask,E_BYTE(a1)
                    391:
                    392: do_restore:
                    393:        movem.l USER_DA(a6),d0-d1/a0-a1
                    394:        fmovem.x USER_FP0(a6),fp0-fp3
                    395:        fmovem.l USER_FPCR(a6),fpcr/fpsr/fpiar
                    396:        frestore (a7)+
                    397:        tst.b   RES_FLG(a6)     ;RES_FLG indicates a "continuation" frame
                    398:        beq     cont
                    399:        bsr     bug1384
                    400: cont:
                    401:        unlk    a6
                    402: *
                    403: * If trace mode enabled, then go to trace handler.  This handler
                    404: * cannot have any fp instructions.  If there are fp inst's and an
                    405: * exception has been restored into the machine then the exception
                    406: * will occur upon execution of the fp inst.  This is not desirable
                    407: * in the kernel (supervisor mode).  See MC68040 manual Section 9.3.8.
                    408: *
                    409: finish_up:
                    410:        btst.b  #7,(a7)         ;test T1 in SR
                    411:        bne.b   g_trace
                    412:        btst.b  #6,(a7)         ;test T0 in SR
                    413:        bne.b   g_trace
                    414:        bra.l   fpsp_done
                    415: *
                    416: * Change integer stack to look like trace stack
                    417: * The address of the instruction that caused the
                    418: * exception is already in the integer stack (is
                    419: * the same as the saved friar)
                    420: *
                    421: * If the current frame is already a 6-word stack then all
                    422: * that needs to be done is to change the vector# to TRACE.
                    423: * If the frame is only a 4-word stack (meaning we got here
                    424: * on an Unsupported data type exception), then we need to grow
                    425: * the stack an extra 2 words and get the FPIAR from the FPU.
                    426: *
                    427: g_trace:
                    428:        bftst   EXC_VEC-4(sp){0:4}
                    429:        bne     g_easy
                    430:
                    431:        subq.l  #4,sp           make room
                    432:        move.l  4(sp),(sp)
                    433:        move.l  8(sp),4(sp)
                    434:        sub.l   #BUSY_SIZE,sp
                    435:        fsave   (sp)
                    436:        fmove.l fpiar,BUSY_SIZE+EXC_EA-4(sp)
                    437:        frestore (sp)
                    438:        add.l   #BUSY_SIZE,sp
                    439:
                    440: g_easy:
                    441:        move.w  #TRACE_VEC,EXC_VEC-4(a7)
                    442:        bra.l   real_trace
                    443: *
                    444: *  This is a work-around for hardware bug 1384.
                    445: *
                    446: bug1384:
                    447:        link    a5,#0
                    448:        fsave   -(sp)
                    449:        cmpi.b  #$41,(sp)       ; check for correct frame
                    450:        beq     frame_41
                    451:        bgt     nofix           ; if more advanced mask, do nada
                    452:
                    453: frame_40:
                    454:        tst.b   1(sp)           ; check to see if idle
                    455:        bne     notidle
                    456: idle40:
                    457:        clr.l   (sp)            ; get rid of old fsave frame
                    458:         move.l  d1,USER_D1(a6)  ; save d1
                    459:        move.w  #8,d1           ; place unimp frame instead
                    460: loop40:        clr.l   -(sp)
                    461:        dbra    d1,loop40
                    462:         move.l  USER_D1(a6),d1  ; restore d1
                    463:        move.l  #$40280000,-(sp)
                    464:        frestore (sp)+
                    465:        unlk    a5
                    466:        rts
                    467:
                    468: frame_41:
                    469:        tst.b   1(sp)           ; check to see if idle
                    470:        bne     notidle
                    471: idle41:
                    472:        clr.l   (sp)            ; get rid of old fsave frame
                    473:         move.l  d1,USER_D1(a6)  ; save d1
                    474:        move.w  #10,d1          ; place unimp frame instead
                    475: loop41:        clr.l   -(sp)
                    476:        dbra    d1,loop41
                    477:         move.l  USER_D1(a6),d1  ; restore d1
                    478:        move.l  #$41300000,-(sp)
                    479:        frestore (sp)+
                    480:        unlk    a5
                    481:        rts
                    482:
                    483: notidle:
                    484:        bclr.b  #etemp15_bit,-40(a5)
                    485:        frestore (sp)+
                    486:        unlk    a5
                    487:        rts
                    488:
                    489: nofix:
                    490:        frestore (sp)+
                    491:        unlk    a5
                    492:        rts
                    493:
                    494:        end

CVSweb