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