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