Annotation of sys/arch/m68k/060sp/fpsp.doc, Revision 1.1
1.1 ! nbrk 1: #
! 2: # $OpenBSD: fpsp.doc,v 1.2 1996/05/30 22:14:16 niklas Exp $
! 3: # $NetBSD: fpsp.doc,v 1.2 1996/05/15 19:47:51 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: 68060 FLOATING-POINT SOFTWARE PACKAGE (Kernel version)
! 40: -------------------------------------------------------
! 41:
! 42: The file fpsp.sa contains the 68060 Floating-Point Software
! 43: Package. This package is essentially a set of exception handlers
! 44: that can be integrated into an operating system.
! 45: These exception handlers emulate Unimplemented FP instructions,
! 46: instructions using unimplemented data types, and instructions
! 47: using unimplemented addressing modes. In addition, this package
! 48: includes exception handlers to provide full IEEE-754 compliant
! 49: exception handling.
! 50:
! 51: Release file format:
! 52: --------------------
! 53: The file fpsp.sa is essentially a hexadecimal image of the
! 54: release package. This is the ONLY format which will be supported.
! 55: The hex image was created by assembling the source code and
! 56: then converting the resulting binary output image into an
! 57: ASCII text file. The hexadecimal numbers are listed
! 58: using the Motorola Assembly Syntax assembler directive "dc.l"
! 59: (define constant longword). The file can be converted to other
! 60: assembly syntaxes by using any word processor with a global
! 61: search and replace function.
! 62:
! 63: To assist in assembling and linking this module with other modules,
! 64: the installer should add a symbolic label to the top of the file.
! 65: This will allow calling routines to access the entry points
! 66: of this package.
! 67:
! 68: The source code fpsp.s has also been included but only for
! 69: documentation purposes.
! 70:
! 71: Release file structure:
! 72: -----------------------
! 73:
! 74: (top of module)
! 75: -----------------
! 76: | | - 128 byte-sized section
! 77: (1) | Call-Out | - 4 bytes per entry (user fills these in)
! 78: | | - example routines in fskeleton.s
! 79: -----------------
! 80: | | - 8 bytes per entry
! 81: (2) | Entry Point | - user does "bra" or "jmp" to this address
! 82: | |
! 83: -----------------
! 84: | | - code section
! 85: (3) ~ ~
! 86: | |
! 87: -----------------
! 88: (bottom of module)
! 89:
! 90: The first section of this module is the "Call-out" section. This section
! 91: is NOT INCLUDED in fpsp.sa (an example "Call-out" section is provided at
! 92: the end of the file fskeleton.s). The purpose of this section is to allow
! 93: the FPSP routines to reference external functions that must be provided
! 94: by the host operating system. This section MUST be exactly 128 bytes in
! 95: size. There are 32 fields, each 4 bytes in size. Each field corresponds
! 96: to a function required by the FPSP (these functions and their location are
! 97: listed in "68060FPSP call-outs" below). Each field entry should contain
! 98: the address of the corresponding function RELATIVE to the starting address
! 99: of the "call-out" section. The "Call-out" section must sit adjacent to the
! 100: fpsp.sa image in memory.
! 101:
! 102: The second section, the "Entry-point" section, is used by external routines
! 103: to access the functions within the FPSP. Since the fpsp.sa hex file contains
! 104: no symbol names, this section contains function entry points that are fixed
! 105: with respect to the top of the package. The currently defined entry-points
! 106: are listed in section "68060 FPSP entry points" below. A calling routine
! 107: would simply execute a "bra" or "jmp" that jumped to the selected function
! 108: entry-point.
! 109:
! 110: For example, if the 68060 hardware took a "Line-F Emulator" exception
! 111: (vector #11), the operating system should execute something similar to:
! 112:
! 113: bra _060FPSP_TOP+128+48
! 114:
! 115: (_060FPSP_TOP is the starting address of the "Call-out" section; the "Call-out"
! 116: section is 128 bytes long; and the F-Line FPSP handler entry point is located
! 117: 48 bytes from the top of the "Entry-point" section.)
! 118:
! 119: The third section is the code section. After entering through an "Entry-point",
! 120: the entry code jumps to the appropriate emulation code within the code section.
! 121:
! 122: 68060FPSP call-outs: (details in fskeleton.s)
! 123: --------------------
! 124: 0x000: _060_real_bsun
! 125: 0x004: _060_real_snan
! 126: 0x008: _060_real_operr
! 127: 0x00c: _060_real_ovfl
! 128: 0x010: _060_real_unfl
! 129: 0x014: _060_real_dz
! 130: 0x018: _060_real_inex
! 131: 0x01c: _060_real_fline
! 132: 0x020: _060_real_fpu_disabled
! 133: 0x024: _060_real_trap
! 134: 0x028: _060_real_trace
! 135: 0x02c: _060_real_access
! 136: 0x030: _060_fpsp_done
! 137:
! 138: 0x034: (Motorola reserved)
! 139: 0x038: (Motorola reserved)
! 140: 0x03c: (Motorola reserved)
! 141:
! 142: 0x040: _060_imem_read
! 143: 0x044: _060_dmem_read
! 144: 0x048: _060_dmem_write
! 145: 0x04c: _060_imem_read_word
! 146: 0x050: _060_imem_read_long
! 147: 0x054: _060_dmem_read_byte
! 148: 0x058: _060_dmem_read_word
! 149: 0x05c: _060_dmem_read_long
! 150: 0x060: _060_dmem_write_byte
! 151: 0x064: _060_dmem_write_word
! 152: 0x068: _060_dmem_write_long
! 153:
! 154: 0x06c: (Motorola reserved)
! 155: 0x070: (Motorola reserved)
! 156: 0x074: (Motorola reserved)
! 157: 0x078: (Motorola reserved)
! 158: 0x07c: (Motorola reserved)
! 159:
! 160: 68060FPSP entry points:
! 161: -----------------------
! 162: 0x000: _060_fpsp_snan
! 163: 0x008: _060_fpsp_operr
! 164: 0x010: _060_fpsp_ovfl
! 165: 0x018: _060_fpsp_unfl
! 166: 0x020: _060_fpsp_dz
! 167: 0x028: _060_fpsp_inex
! 168: 0x030: _060_fpsp_fline
! 169: 0x038: _060_fpsp_unsupp
! 170: 0x040: _060_fpsp_effadd
! 171:
! 172:
! 173: Miscellaneous:
! 174: --------------
! 175:
! 176: _060_fpsp_snan:
! 177: ----------------
! 178: - documented in 3.5 of 060SP spec.
! 179: - Basic flow:
! 180: exception taken ---> enter _060_fpsp_snan --|
! 181: |
! 182: always exits through _060_real_snan <----
! 183:
! 184: _060_fpsp_operr:
! 185: ----------------
! 186: - documented in 3.5 of 060SP spec.
! 187: - Basic flow:
! 188: exception taken ---> enter _060_fpsp_operr --|
! 189: |
! 190: always exits through _060_real_operr <-----
! 191:
! 192: _060_fpsp_dz:
! 193: ----------------
! 194: - documented in 3.7 of 060SP spec.
! 195: - Basic flow:
! 196: exception taken ---> enter _060_fpsp_dz --|
! 197: |
! 198: always exits through _060_real_dz <----
! 199:
! 200: _060_fpsp_inex:
! 201: ----------------
! 202: - documented in 3.6 of 060SP spec.
! 203: - Basic flow:
! 204: exception taken ---> enter _060_fpsp_inex --|
! 205: |
! 206: always exits through _060_real_inex <----
! 207:
! 208: _060_fpsp_ovfl:
! 209: ----------------
! 210: - documented in 3.4 of 060SP spec.
! 211: - Basic flow:
! 212: exception taken ---> enter _060_fpsp_ovfl --|
! 213: |
! 214: may exit through _060_real_inex <---|
! 215: or |
! 216: may exit through _060_real_ovfl <---|
! 217: or |
! 218: may exit through _060_fpsp_done <---|
! 219:
! 220: _060_fpsp_unfl:
! 221: ----------------
! 222: - documented in 3.4 of 060SP spec.
! 223: - Basic flow:
! 224: exception taken ---> enter _060_fpsp_unfl --|
! 225: |
! 226: may exit through _060_real_inex <---|
! 227: or |
! 228: may exit through _060_real_unfl <---|
! 229: or |
! 230: may exit through _060_fpsp_done <---|
! 231:
! 232: _060_fpsp_fline:
! 233: -----------------
! 234: - not fully documented in 060SP spec.
! 235: - Basic flow:
! 236: exception taken ---> enter _060_fpsp_fline --|
! 237: |
! 238: -------------------------------------------
! 239: | | |
! 240: v v v
! 241: (unimplemented (fpu disabled) (possible F-line illegal)
! 242: stack frame) | v
! 243: | v special case "fmovecr"?
! 244: | exit through |
! 245: | _060_real_fpu_disabled -------------
! 246: | | |
! 247: | ^ v v
! 248: | | (yes) (no)
! 249: | | v v
! 250: | | fpu disabled? exit through
! 251: | | | _060_real_fline
! 252: v | -------------
! 253: | | | |
! 254: | | v v
! 255: | |-----------(yes) (no)
! 256: | |
! 257: |----<------------------------------------|
! 258: |
! 259: |
! 260: |----> may exit through _060_real_trace
! 261: |
! 262: |----> may exit through _060_real_trap
! 263: |
! 264: |----> may exit thorugh _060_real_bsun
! 265: |
! 266: |----> may exit through _060_fpsp_done
! 267:
! 268: _060_fpsp_unsupp:
! 269: ------------------
! 270: - documented in 3.1 of 060SP spec.
! 271: - Basic flow:
! 272: exception taken ---> enter _060_fpsp_unsupp --|
! 273: |
! 274: |
! 275: may exit through _060_real_snan <----|
! 276: or |
! 277: may exit through _060_real_operr <----|
! 278: or |
! 279: may exit through _060_real_ovfl <----|
! 280: or |
! 281: may exit through _060_real_unfl <----|
! 282: or |
! 283: may exit through _060_real_inex <----|
! 284: or |
! 285: may exit through _060_real_trace <----|
! 286: or |
! 287: may exit through _060_fpsp_done <----|
! 288:
! 289: _060_fpsp_effadd:
! 290: ------------------
! 291: - documented in 3.3 of 060 spec.
! 292: - Basic flow:
! 293: exception taken ---> enter _060_fpsp_effadd --|
! 294: |
! 295: |
! 296: may exit through _060_real_trace <----|
! 297: or |
! 298: may exit through _060_real_fpu_disabled <----|
! 299: or |
! 300: may exit through _060_fpsp_done <----|
CVSweb