Annotation of sys/arch/m68k/060sp/fskeletn.s, Revision 1.1
1.1 ! nbrk 1: #
! 2: # $OpenBSD: fskeletn.s,v 1.2 1996/05/30 22:14:31 niklas Exp $
! 3: # $NetBSD: fskeletn.s,v 1.2 1996/05/15 19:48:30 is Exp $
! 4: #
! 5:
! 6: #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 7: # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
! 8: # M68000 Hi-Performance Microprocessor Division
! 9: # M68060 Software Package Production Release
! 10: #
! 11: # M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
! 12: # All rights reserved.
! 13: #
! 14: # THE SOFTWARE is provided on an "AS IS" basis and without warranty.
! 15: # To the maximum extent permitted by applicable law,
! 16: # MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
! 17: # INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
! 18: # FOR A PARTICULAR PURPOSE and any warranty against infringement with
! 19: # regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
! 20: # and any accompanying written materials.
! 21: #
! 22: # To the maximum extent permitted by applicable law,
! 23: # IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
! 24: # (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
! 25: # BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
! 26: # ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
! 27: #
! 28: # Motorola assumes no responsibility for the maintenance and support
! 29: # of the SOFTWARE.
! 30: #
! 31: # You are hereby granted a copyright license to use, modify, and distribute the
! 32: # SOFTWARE so long as this entire notice is retained without alteration
! 33: # in any modified and/or redistributed versions, and that such modified
! 34: # versions are clearly identified as such.
! 35: # No licenses are granted by implication, estoppel or otherwise under any
! 36: # patents or trademarks of Motorola, Inc.
! 37: #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! 38:
! 39: #
! 40: # fskeleton.s
! 41: #
! 42: # This file contains:
! 43: # (1) example "Call-out"s
! 44: # (2) example package entry code
! 45: # (3) example "Call-out" table
! 46: #
! 47:
! 48:
! 49: #################################
! 50: # (1) EXAMPLE CALL-OUTS #
! 51: # #
! 52: # _060_fpsp_done() #
! 53: # _060_real_ovfl() #
! 54: # _060_real_unfl() #
! 55: # _060_real_operr() #
! 56: # _060_real_snan() #
! 57: # _060_real_dz() #
! 58: # _060_real_inex() #
! 59: # _060_real_bsun() #
! 60: # _060_real_fline() #
! 61: # _060_real_fpu_disabled() #
! 62: # _060_real_trap() #
! 63: #################################
! 64:
! 65: #
! 66: # _060_fpsp_done():
! 67: #
! 68: # This is the main exit point for the 68060 Floating-Point
! 69: # Software Package. For a normal exit, all 060FPSP routines call this
! 70: # routine. The operating system can do system dependent clean-up or
! 71: # simply execute an "rte" as with the sample code below.
! 72: #
! 73: global _060_fpsp_done
! 74: _060_fpsp_done:
! 75: rte
! 76:
! 77: #
! 78: # _060_real_ovfl():
! 79: #
! 80: # This is the exit point for the 060FPSP when an enabled overflow exception
! 81: # is present. The routine below should point to the operating system handler
! 82: # for enabled overflow conditions. The exception stack frame is an overflow
! 83: # stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
! 84: #
! 85: # The sample routine below simply clears the exception status bit and
! 86: # does an "rte".
! 87: #
! 88: global _060_real_ovfl
! 89: _060_real_ovfl:
! 90: fsave -(%sp)
! 91: mov.w &0x6000,0x2(%sp)
! 92: frestore (%sp)+
! 93: rte
! 94:
! 95: #
! 96: # _060_real_unfl():
! 97: #
! 98: # This is the exit point for the 060FPSP when an enabled underflow exception
! 99: # is present. The routine below should point to the operating system handler
! 100: # for enabled underflow conditions. The exception stack frame is an underflow
! 101: # stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
! 102: #
! 103: # The sample routine below simply clears the exception status bit and
! 104: # does an "rte".
! 105: #
! 106: global _060_real_unfl
! 107: _060_real_unfl:
! 108: fsave -(%sp)
! 109: mov.w &0x6000,0x2(%sp)
! 110: frestore (%sp)+
! 111: rte
! 112:
! 113: #
! 114: # _060_real_operr():
! 115: #
! 116: # This is the exit point for the 060FPSP when an enabled operand error exception
! 117: # is present. The routine below should point to the operating system handler
! 118: # for enabled operand error exceptions. The exception stack frame is an operand error
! 119: # stack frame. The FP state frame holds the source operand of the faulting
! 120: # instruction.
! 121: #
! 122: # The sample routine below simply clears the exception status bit and
! 123: # does an "rte".
! 124: #
! 125: global _060_real_operr
! 126: _060_real_operr:
! 127: fsave -(%sp)
! 128: mov.w &0x6000,0x2(%sp)
! 129: frestore (%sp)+
! 130: rte
! 131:
! 132: #
! 133: # _060_real_snan():
! 134: #
! 135: # This is the exit point for the 060FPSP when an enabled signalling NaN exception
! 136: # is present. The routine below should point to the operating system handler
! 137: # for enabled signalling NaN exceptions. The exception stack frame is a signalling NaN
! 138: # stack frame. The FP state frame holds the source operand of the faulting
! 139: # instruction.
! 140: #
! 141: # The sample routine below simply clears the exception status bit and
! 142: # does an "rte".
! 143: #
! 144: global _060_real_snan
! 145: _060_real_snan:
! 146: fsave -(%sp)
! 147: mov.w &0x6000,0x2(%sp)
! 148: frestore (%sp)+
! 149: rte
! 150:
! 151: #
! 152: # _060_real_dz():
! 153: #
! 154: # This is the exit point for the 060FPSP when an enabled divide-by-zero exception
! 155: # is present. The routine below should point to the operating system handler
! 156: # for enabled divide-by-zero exceptions. The exception stack frame is a divide-by-zero
! 157: # stack frame. The FP state frame holds the source operand of the faulting
! 158: # instruction.
! 159: #
! 160: # The sample routine below simply clears the exception status bit and
! 161: # does an "rte".
! 162: #
! 163: global _060_real_dz
! 164: _060_real_dz:
! 165: fsave -(%sp)
! 166: mov.w &0x6000,0x2(%sp)
! 167: frestore (%sp)+
! 168: rte
! 169:
! 170: #
! 171: # _060_real_inex():
! 172: #
! 173: # This is the exit point for the 060FPSP when an enabled inexact exception
! 174: # is present. The routine below should point to the operating system handler
! 175: # for enabled inexact exceptions. The exception stack frame is an inexact
! 176: # stack frame. The FP state frame holds the source operand of the faulting
! 177: # instruction.
! 178: #
! 179: # The sample routine below simply clears the exception status bit and
! 180: # does an "rte".
! 181: #
! 182: global _060_real_inex
! 183: _060_real_inex:
! 184: fsave -(%sp)
! 185: mov.w &0x6000,0x2(%sp)
! 186: frestore (%sp)+
! 187: rte
! 188:
! 189: #
! 190: # _060_real_bsun():
! 191: #
! 192: # This is the exit point for the 060FPSP when an enabled bsun exception
! 193: # is present. The routine below should point to the operating system handler
! 194: # for enabled bsun exceptions. The exception stack frame is a bsun
! 195: # stack frame.
! 196: #
! 197: # The sample routine below clears the exception status bit, clears the NaN
! 198: # bit in the FPSR, and does an "rte". The instruction that caused the
! 199: # bsun will now be re-executed but with the NaN FPSR bit cleared.
! 200: #
! 201: global _060_real_bsun
! 202: _060_real_bsun:
! 203: fsave -(%sp)
! 204:
! 205: fmov.l %fpsr,-(%sp)
! 206: andi.b &0xfe,(%sp)
! 207: fmov.l (%sp)+,%fpsr
! 208:
! 209: add.l &0xc,%sp
! 210: rte
! 211:
! 212: #
! 213: # _060_real_fline():
! 214: #
! 215: # This is the exit point for the 060FPSP when an F-Line Illegal exception is
! 216: # encountered. Three different types of exceptions can enter the F-Line exception
! 217: # vector number 11: FP Unimplemented Instructions, FP implemented instructions when
! 218: # the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
! 219: # _fpsp_fline() distinguishes between the three and acts appropriately. F-Line
! 220: # Illegals branch here.
! 221: #
! 222: global _060_real_fline
! 223: _060_real_fline:
! 224: bra.b _060_real_fline
! 225:
! 226: #
! 227: # _060_real_fpu_disabled():
! 228: #
! 229: # This is the exit point for the 060FPSP when an FPU disabled exception is
! 230: # encountered. Three different types of exceptions can enter the F-Line exception
! 231: # vector number 11: FP Unimplemented Instructions, FP implemented instructions when
! 232: # the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
! 233: # _fpsp_fline() distinguishes between the three and acts appropriately. FPU disabled
! 234: # exceptions branch here.
! 235: #
! 236: # The sample code below enables the FPU, sets the PC field in the exception stack
! 237: # frame to the PC of the instruction causing the exception, and does an "rte".
! 238: # The execution of the instruction then proceeds with an enabled floating-point
! 239: # unit.
! 240: #
! 241: global _060_real_fpu_disabled
! 242: _060_real_fpu_disabled:
! 243: mov.l %d0,-(%sp) # enabled the fpu
! 244: movc %pcr,%d0
! 245: bclr &0x1,%d0
! 246: movc %d0,%pcr
! 247: mov.l (%sp)+,%d0
! 248:
! 249: mov.l 0xc(%sp),0x2(%sp) # set "Current PC"
! 250: rte
! 251:
! 252: #
! 253: # _060_real_trap():
! 254: #
! 255: # This is the exit point for the 060FPSP when an emulated "ftrapcc" instruction
! 256: # discovers that the trap condition is true and it should branch to the operating
! 257: # system handler for the trap exception vector number 7.
! 258: #
! 259: # The sample code below simply executes an "rte".
! 260: #
! 261: global _060_real_trap
! 262: _060_real_trap:
! 263: rte
! 264:
! 265: #############################################################################
! 266:
! 267: ##################################
! 268: # (2) EXAMPLE PACKAGE ENTRY CODE #
! 269: ##################################
! 270:
! 271: global _060_fpsp_snan
! 272: _060_fpsp_snan:
! 273: bra.l _FP_CALL_TOP+0x80+0x00
! 274:
! 275: global _060_fpsp_operr
! 276: _060_fpsp_operr:
! 277: bra.l _FP_CALL_TOP+0x80+0x08
! 278:
! 279: global _060_fpsp_ovfl
! 280: _060_fpsp_ovfl:
! 281: bra.l _FP_CALL_TOP+0x80+0x10
! 282:
! 283: global _060_fpsp_unfl
! 284: _060_fpsp_unfl:
! 285: bra.l _FP_CALL_TOP+0x80+0x18
! 286:
! 287: global _060_fpsp_dz
! 288: _060_fpsp_dz:
! 289: bra.l _FP_CALL_TOP+0x80+0x20
! 290:
! 291: global _060_fpsp_inex
! 292: _060_fpsp_inex:
! 293: bra.l _FP_CALL_TOP+0x80+0x28
! 294:
! 295: global _060_fpsp_fline
! 296: _060_fpsp_fline:
! 297: bra.l _FP_CALL_TOP+0x80+0x30
! 298:
! 299: global _060_fpsp_unsupp
! 300: _060_fpsp_unsupp:
! 301: bra.l _FP_CALL_TOP+0x80+0x38
! 302:
! 303: global _060_fpsp_effadd
! 304: _060_fpsp_effadd:
! 305: bra.l _FP_CALL_TOP+0x80+0x40
! 306:
! 307: #############################################################################
! 308:
! 309: ################################
! 310: # (3) EXAMPLE CALL-OUT SECTION #
! 311: ################################
! 312:
! 313: # The size of this section MUST be 128 bytes!!!
! 314:
! 315: global _FP_CALL_TOP
! 316: _FP_CALL_TOP:
! 317: long _060_real_bsun - _FP_CALL_TOP
! 318: long _060_real_snan - _FP_CALL_TOP
! 319: long _060_real_operr - _FP_CALL_TOP
! 320: long _060_real_ovfl - _FP_CALL_TOP
! 321: long _060_real_unfl - _FP_CALL_TOP
! 322: long _060_real_dz - _FP_CALL_TOP
! 323: long _060_real_inex - _FP_CALL_TOP
! 324: long _060_real_fline - _FP_CALL_TOP
! 325: long _060_real_fpu_disabled - _FP_CALL_TOP
! 326: long _060_real_trap - _FP_CALL_TOP
! 327: long _060_real_trace - _FP_CALL_TOP
! 328: long _060_real_access - _FP_CALL_TOP
! 329: long _060_fpsp_done - _FP_CALL_TOP
! 330:
! 331: long 0x00000000, 0x00000000, 0x00000000
! 332:
! 333: long _060_imem_read - _FP_CALL_TOP
! 334: long _060_dmem_read - _FP_CALL_TOP
! 335: long _060_dmem_write - _FP_CALL_TOP
! 336: long _060_imem_read_word - _FP_CALL_TOP
! 337: long _060_imem_read_long - _FP_CALL_TOP
! 338: long _060_dmem_read_byte - _FP_CALL_TOP
! 339: long _060_dmem_read_word - _FP_CALL_TOP
! 340: long _060_dmem_read_long - _FP_CALL_TOP
! 341: long _060_dmem_write_byte - _FP_CALL_TOP
! 342: long _060_dmem_write_word - _FP_CALL_TOP
! 343: long _060_dmem_write_long - _FP_CALL_TOP
! 344:
! 345: long 0x00000000
! 346:
! 347: long 0x00000000, 0x00000000, 0x00000000, 0x00000000
! 348:
! 349: #############################################################################
! 350:
! 351: # 060 FPSP KERNEL PACKAGE NEEDS TO GO HERE!!!
CVSweb