1 | 2 | get_op.sa 3.6 5/19/92 3 | 4 | get_op.sa 3.5 4/26/91 5 | 6 | Description: This routine is called by the 7 | type exception handler ('unsupp' - vector 55 8 | instruction exception handler ('unimp' - vec 9 | determines the opclass (0, 2, or 3) and bran 10 | opclass handler routine. See 68881/2 User's 11 | for a description of the opclasses. 12 | 13 | For UNSUPPORTED data/format (exception vecto 14 | UNIMPLEMENTED instructions (exception vector 15 | applies: 16 | 17 | - For unnormalized numbers (opclass 0, 2, or 18 | number(s) is normalized and the operand type 19 | 20 | - For a packed number (opclass 2) the number 21 | operand type tag is updated. 22 | 23 | - For denormalized numbers (opclass 0 or 2) 24 | changed but passed to the next module. The 25 | unimp is do_func, the next module for unsupp 26 | 27 | For UNSUPPORTED data/format (exception vecto 28 | following applies: 29 | 30 | - If there is a move out with a packed numbe 31 | number is packed and written to user memory. 32 | opclasses the number(s) are written back to 33 | and the instruction is then restored back in 34 | '040 is then able to complete the instructio 35 | 36 | For example: 37 | fadd.x fpm,fpn where the fpm contains an unn 38 | The '040 takes an unsupported data trap and 39 | routine. The number is normalized, put back 40 | then an frestore is done to restore the inst 41 | the '040. The '040 then re-executes the fad 42 | a normalized number in the source and the in 43 | successful. 44 | 45 | Next consider if in the process of normalizi 46 | normalized number it becomes a denormalized 47 | routine which converts the unnorm to a norm 48 | detects this and tags the number as a denorm 49 | res_func sees the denorm tag and converts th 50 | norm. The instruction is then restored back 51 | which re_executes the instruction. 52 | 53 | 54 | Copyright (C) Motorola, Inc. 1 55 | All Rights Reserved 56 | 57 | For details on the license for this fi 58 | file, README, in this same directory. 59 60 GET_OP: |idnt 2,1 | Motorola 040 Floatin 61 62 |section 8 63 64 #include "fpsp.h" 65 66 .global PIRN,PIRZRM,PIRP 67 .global SMALRN,SMALRZRM,SMALRP 68 .global BIGRN,BIGRZRM,BIGRP 69 70 PIRN: 71 .long 0x40000000,0xc90fdaa2,0x2168c235 72 PIRZRM: 73 .long 0x40000000,0xc90fdaa2,0x2168c234 74 PIRP: 75 .long 0x40000000,0xc90fdaa2,0x2168c235 76 77 |round to nearest 78 SMALRN: 79 .long 0x3ffd0000,0x9a209a84,0xfbcff798 80 .long 0x40000000,0xadf85458,0xa2bb4a9a 81 .long 0x3fff0000,0xb8aa3b29,0x5c17f0bc 82 .long 0x3ffd0000,0xde5bd8a9,0x37287195 83 .long 0x00000000,0x00000000,0x00000000 84 | round to zero;round to negative infinity 85 SMALRZRM: 86 .long 0x3ffd0000,0x9a209a84,0xfbcff798 87 .long 0x40000000,0xadf85458,0xa2bb4a9a 88 .long 0x3fff0000,0xb8aa3b29,0x5c17f0bb 89 .long 0x3ffd0000,0xde5bd8a9,0x37287195 90 .long 0x00000000,0x00000000,0x00000000 91 | round to positive infinity 92 SMALRP: 93 .long 0x3ffd0000,0x9a209a84,0xfbcff799 94 .long 0x40000000,0xadf85458,0xa2bb4a9b 95 .long 0x3fff0000,0xb8aa3b29,0x5c17f0bc 96 .long 0x3ffd0000,0xde5bd8a9,0x37287195 97 .long 0x00000000,0x00000000,0x00000000 98 99 |round to nearest 100 BIGRN: 101 .long 0x3ffe0000,0xb17217f7,0xd1cf79ac 102 .long 0x40000000,0x935d8ddd,0xaaa8ac17 103 .long 0x3fff0000,0x80000000,0x00000000 104 105 .global PTENRN 106 PTENRN: 107 .long 0x40020000,0xA0000000,0x00000000 108 .long 0x40050000,0xC8000000,0x00000000 109 .long 0x400C0000,0x9C400000,0x00000000 110 .long 0x40190000,0xBEBC2000,0x00000000 111 .long 0x40340000,0x8E1BC9BF,0x04000000 112 .long 0x40690000,0x9DC5ADA8,0x2B70B59E 113 .long 0x40D30000,0xC2781F49,0xFFCFA6D5 114 .long 0x41A80000,0x93BA47C9,0x80E98CE0 115 .long 0x43510000,0xAA7EEBFB,0x9DF9DE8E 116 .long 0x46A30000,0xE319A0AE,0xA60E91C7 117 .long 0x4D480000,0xC9767586,0x81750C17 118 .long 0x5A920000,0x9E8B3B5D,0xC53D5DE5 119 .long 0x75250000,0xC4605202,0x8A20979B 120 |round to minus infinity 121 BIGRZRM: 122 .long 0x3ffe0000,0xb17217f7,0xd1cf79ab 123 .long 0x40000000,0x935d8ddd,0xaaa8ac16 124 .long 0x3fff0000,0x80000000,0x00000000 125 126 .global PTENRM 127 PTENRM: 128 .long 0x40020000,0xA0000000,0x00000000 129 .long 0x40050000,0xC8000000,0x00000000 130 .long 0x400C0000,0x9C400000,0x00000000 131 .long 0x40190000,0xBEBC2000,0x00000000 132 .long 0x40340000,0x8E1BC9BF,0x04000000 133 .long 0x40690000,0x9DC5ADA8,0x2B70B59D 134 .long 0x40D30000,0xC2781F49,0xFFCFA6D5 135 .long 0x41A80000,0x93BA47C9,0x80E98CDF 136 .long 0x43510000,0xAA7EEBFB,0x9DF9DE8D 137 .long 0x46A30000,0xE319A0AE,0xA60E91C6 138 .long 0x4D480000,0xC9767586,0x81750C17 139 .long 0x5A920000,0x9E8B3B5D,0xC53D5DE5 140 .long 0x75250000,0xC4605202,0x8A20979A 141 |round to positive infinity 142 BIGRP: 143 .long 0x3ffe0000,0xb17217f7,0xd1cf79ac 144 .long 0x40000000,0x935d8ddd,0xaaa8ac17 145 .long 0x3fff0000,0x80000000,0x00000000 146 147 .global PTENRP 148 PTENRP: 149 .long 0x40020000,0xA0000000,0x00000000 150 .long 0x40050000,0xC8000000,0x00000000 151 .long 0x400C0000,0x9C400000,0x00000000 152 .long 0x40190000,0xBEBC2000,0x00000000 153 .long 0x40340000,0x8E1BC9BF,0x04000000 154 .long 0x40690000,0x9DC5ADA8,0x2B70B59E 155 .long 0x40D30000,0xC2781F49,0xFFCFA6D6 156 .long 0x41A80000,0x93BA47C9,0x80E98CE0 157 .long 0x43510000,0xAA7EEBFB,0x9DF9DE8E 158 .long 0x46A30000,0xE319A0AE,0xA60E91C7 159 .long 0x4D480000,0xC9767586,0x81750C18 160 .long 0x5A920000,0x9E8B3B5D,0xC53D5DE6 161 .long 0x75250000,0xC4605202,0x8A20979B 162 163 |xref nrm_zero 164 |xref decbin 165 |xref round 166 167 .global get_op 168 .global uns_getop 169 .global uni_getop 170 get_op: 171 clrb DY_MO_FLG(%a6) 172 tstb UFLG_TMP(%a6) |test flag for 173 beq uni_getop 174 175 uns_getop: 176 btstb #direction_bit,CMDREG1B(%a6) 177 bne opclass3 |branch if a f 178 btstb #6,CMDREG1B(%a6) 179 beqs uns_notpacked 180 181 bfextu CMDREG1B(%a6){#3:#3},%d0 182 cmpb #3,%d0 183 beq pack_source |check for a p 184 uns_notpacked: 185 bsr chk_dy_mo |set the dyadi 186 tstb DY_MO_FLG(%a6) 187 beqs src_op_ck |if monadic, g 188 | ;else, check d 189 190 btstb #7,DTAG(%a6) 191 beqs src_op_ck |if dst op is 192 bras dst_ex_dnrm |else, handle 193 194 uni_getop: 195 bfextu CMDREG1B(%a6){#0:#6},%d0 |get 196 cmpil #0x17,%d0 |if op 197 | ;it is FMOVECR 198 | 199 | If the instruction is fmovecr, exit get_op. 200 | in do_func and smovecr.sa. 201 | 202 bne not_fmovecr |handle fmovec 203 rts 204 205 not_fmovecr: 206 btstb #E1,E_BYTE(%a6) |if set, there 207 bne pack_source |check for pac 208 209 | The following lines of are coded to optimize 210 moveb STAG(%a6),%d0 211 orb DTAG(%a6),%d0 |check if eith 212 bmis dest_op_ck |if so, some o 213 rts 214 215 dest_op_ck: 216 btstb #7,DTAG(%a6) |check for uns 217 beqs src_op_ck |the destinati 218 bsr chk_dy_mo |set dyadic/mo 219 tstb DY_MO_FLG(%a6) | 220 beqs src_op_ck |if monadic, c 221 | 222 | At this point, destination has an extended d 223 | 224 dst_ex_dnrm: 225 movew FPTEMP_EX(%a6),%d0 |get destin 226 andiw #0x7fff,%d0 |mask sign, ch 227 beqs src_op_ck |if denorm the 228 | ;denorms are t 229 | ;(unsupp) or d 230 | ;else unnorm f 231 leal FPTEMP(%a6),%a0 |point a0 to d 232 bsr mk_norm |go normalize 233 | ;L_SCR1{7:5} = 234 | ; (000 = 235 | ;L_SCR1{4} = f 236 | ; 0 = ex 237 | ; 1 = ex 238 | ;and puts the 239 | ;on the fsave 240 | 241 moveb L_SCR1(%a6),DTAG(%a6) |write the 242 | ;to the fsave 243 | ;through to ch 244 | 245 src_op_ck: 246 btstb #7,STAG(%a6) 247 beq end_getop |check for uns 248 | ;source operan 249 btstb #5,STAG(%a6) 250 bnes src_sd_dnrm |if bit 5 set, 251 | 252 | At this point only unnorms or extended denor 253 | 254 src_ex_dnrm: 255 movew ETEMP_EX(%a6),%d0 |get source 256 andiw #0x7fff,%d0 |mask sign, ch 257 beq end_getop |if denorm the 258 | ;handled in do 259 leal ETEMP(%a6),%a0 |point a0 to s 260 bsr mk_norm |go normalize 261 | ;L_SCR1{7:5} = 262 | ; (000 = 263 | ;L_SCR1{4} = f 264 | ; 0 = ex 265 | ; 1 = ex 266 | ;and puts the 267 | ;on the fsave 268 | 269 moveb L_SCR1(%a6),STAG(%a6) |write t 270 rts |end_getop 271 272 | 273 | At this point, only single or double denorms 274 | If the inst is not fmove, normalize the sour 275 | do nothing to the input. 276 | 277 src_sd_dnrm: 278 btstb #4,CMDREG1B(%a6) |diffe 279 bnes is_double 280 is_single: 281 movew #0x3f81,%d1 |write bias fo 282 bras common |goto the comm 283 is_double: 284 movew #0x3c01,%d1 |write the bia 285 common: 286 btstb #sign_bit,ETEMP_EX(%a6) |grab 287 beqs pos 288 bset #15,%d1 |set sign bit 289 pos: 290 movew %d1,ETEMP_EX(%a6) 291 | ;put exponent 292 293 movew CMDREG1B(%a6),%d1 294 andw #0xe3ff,%d1 |clear out sou 295 orw #0x0800,%d1 |set source sp 296 movew %d1,CMDREG1B(%a6) |write 297 | ;this is neede 298 leal ETEMP(%a6),%a0 |point a0 to s 299 300 bsr mk_norm |convert sgl/d 301 moveb L_SCR1(%a6),STAG(%a6) |put tag 302 rts |end_getop 303 | 304 | At this point, the source is definitely pack 305 | instruction is dyadic or monadic is still un 306 | 307 pack_source: 308 movel FPTEMP_LO(%a6),ETEMP(%a6) 309 | ;number to ete 310 bsr chk_dy_mo |set dyadic/mo 311 bsr unpack 312 313 tstb DY_MO_FLG(%a6) 314 beqs end_getop |if monadic, e 315 | ;else, fix FPT 316 pack_dya: 317 bfextu CMDREG1B(%a6){#6:#3},%d0 |extr 318 movel #7,%d1 319 subl %d0,%d1 320 clrl %d0 321 bsetl %d1,%d0 |set up d0 as 322 fmovemx %d0,FPTEMP(%a6) |write to FPTE 323 324 btstb #7,DTAG(%a6) |check dest ta 325 bne dst_ex_dnrm |else, handle 326 | 327 | Dest is not denormalized. Check for norm, a 328 | accordingly. 329 | 330 moveb DTAG(%a6),%d0 331 andib #0xf0,%d0 |strip 332 tstb %d0 |check for nor 333 bnes end_getop |if inf/nan/ze 334 movew FPTEMP_EX(%a6),%d0 335 andiw #0x7fff,%d0 336 cmpiw #0x3fff,%d0 |check if fpte 337 bges end_getop |if >= $3fff, 338 orb #0x10,DTAG(%a6) 339 bras end_getop 340 341 | 342 | At this point, it is either an fmoveout pack 343 | 344 opclass3: 345 clrb DY_MO_FLG(%a6) |set dyadic/mo 346 bfextu CMDREG1B(%a6){#4:#2},%d0 347 cmpib #3,%d0 348 bne src_ex_dnrm |if not equal, 349 | ;else it is a 350 | ;exit 351 end_getop: 352 rts 353 354 | 355 | Sets the DY_MO_FLG correctly. This is used o 356 | unsupported data type exception. Set if dya 357 | 358 chk_dy_mo: 359 movew CMDREG1B(%a6),%d0 360 btstl #5,%d0 |testing exten 361 beqs set_mon |if bit 5 = 0 362 btstl #4,%d0 |know that bit 363 beqs set_dya |if bit 4 = 0 364 andiw #0x007f,%d0 |get rid of al 365 cmpiw #0x0038,%d0 |if extension 366 bnes set_mon 367 set_dya: 368 st DY_MO_FLG(%a6) |set the inst 369 rts 370 set_mon: 371 clrb DY_MO_FLG(%a6) |set the inst 372 rts 373 | 374 | MK_NORM 375 | 376 | Normalizes unnormalized numbers, sets tag to 377 | exception if denorm. 378 | 379 | CASE opclass 0x0 unsupp 380 | mk_norm till msb set 381 | set tag = norm 382 | 383 | CASE opclass 0x0 unimp 384 | mk_norm till msb set or exp = 0 385 | if integer bit = 0 386 | tag = denorm 387 | else 388 | tag = norm 389 | 390 | CASE opclass 011 unsupp 391 | mk_norm till msb set or exp = 0 392 | if integer bit = 0 393 | tag = denorm 394 | set unfl_nmcexe = 1 395 | else 396 | tag = norm 397 | 398 | if exp <= $3fff 399 | set ete15 or fpte15 = 1 400 | else set ete15 or fpte15 = 0 401 402 | input: 403 | a0 = points to operand to be normalize 404 | output: 405 | L_SCR1{7:5} = operand tag (000 = norm, 406 | L_SCR1{4} = fpte15 or ete15 (0 = exp 407 | the normalized operand is placed back 408 mk_norm: 409 clrl L_SCR1(%a6) 410 bclrb #sign_bit,LOCAL_EX(%a0) 411 sne LOCAL_SGN(%a0) |transform int 412 413 cmpib #0x2c,1+EXC_VEC(%a6) |check if 414 bnes uns_data |branch if uns 415 bsr uni_inst |call if unimp 416 bras reload 417 uns_data: 418 btstb #direction_bit,CMDREG1B(%a6) | 419 bnes bit_set |branch if set 420 bsr uns_opx |call if opcla 421 bras reload 422 bit_set: 423 bsr uns_op3 |opclass 011 424 reload: 425 cmpw #0x3fff,LOCAL_EX(%a0) |if exp 426 bgts end_mk | fpte15/ete 427 bsetb #4,L_SCR1(%a6) |else set fpte 428 | ;calling routi 429 | ;value on the 430 | ;tag), since t 431 | ;know if it sh 432 | ;ie, it doesn' 433 | ;src op or des 434 end_mk: 435 bfclr LOCAL_SGN(%a0){#0:#8} 436 beqs end_mk_pos 437 bsetb #sign_bit,LOCAL_EX(%a0) |conve 438 end_mk_pos: 439 rts 440 | 441 | CASE opclass 011 unsupp 442 | 443 uns_op3: 444 bsr nrm_zero |normalize til 445 btstb #7,LOCAL_HI(%a0) |if ms 446 bnes no_unfl |then branch 447 set_unfl: 448 orw #dnrm_tag,L_SCR1(%a6) |set den 449 bsetb #unfl_bit,FPSR_EXCEPT(%a6) |se 450 no_unfl: 451 rts 452 | 453 | CASE opclass 0x0 unsupp 454 | 455 uns_opx: 456 bsr nrm_zero |normalize the 457 btstb #7,LOCAL_HI(%a0) |check 458 beqs uns_den |if clear then 459 uns_nrm: 460 orb #norm_tag,L_SCR1(%a6) |set tag 461 rts 462 uns_den: 463 orb #dnrm_tag,L_SCR1(%a6) |set tag 464 rts 465 | 466 | CASE opclass 0x0 unimp 467 | 468 uni_inst: 469 bsr nrm_zero 470 btstb #7,LOCAL_HI(%a0) |check 471 beqs uni_den |if clear then 472 uni_nrm: 473 orb #norm_tag,L_SCR1(%a6) |set tag 474 rts 475 uni_den: 476 orb #dnrm_tag,L_SCR1(%a6) |set tag 477 rts 478 479 | 480 | Decimal to binary conversion 481 | 482 | Special cases of inf and NaNs are completed 483 | If the input is an snan, the snan bit is not 484 | 485 | input: 486 | ETEMP(a6) - points to packed dec 487 | output: 488 | fp0 - contains packed string conve 489 | ETEMP - same as fp0 490 unpack: 491 movew CMDREG1B(%a6),%d0 |exami 492 andw #0x3b,%d0 493 beq move_unpack |special handl 494 495 movew ETEMP(%a6),%d0 |get word with 496 bfextu %d0{#20:#12},%d1 |get e 497 cmpiw #0x0fff,%d1 |test for inf 498 bnes try_zero |if not equal, 499 bfextu %d0{#17:#3},%d1 |get SE and y 500 cmpiw #7,%d1 |SE and y bits 501 bnes try_zero |if not on, it 502 |input is of the special cases of inf and NaN 503 tstl ETEMP_HI(%a6) |check ms mant 504 bnes fix_nan |if non-zero, 505 tstl ETEMP_LO(%a6) |check ls mant 506 bnes fix_nan |if non-zero, 507 bra finish |special alrea 508 fix_nan: 509 btstb #signan_bit,ETEMP_HI(%a6) |tes 510 bne finish 511 orl #snaniop_mask,USER_FPSR(%a6) | 512 bra finish 513 try_zero: 514 movew ETEMP_EX+2(%a6),%d0 |get word 515 andiw #0x000f,%d0 |clear all but 516 tstw %d0 |check for zer 517 bne not_spec 518 tstl ETEMP_HI(%a6) |check words 3 519 bne not_spec 520 tstl ETEMP_LO(%a6) |check words 1 521 bne not_spec 522 tstl ETEMP(%a6) |test sign of 523 bges pos_zero 524 movel #0x80000000,ETEMP(%a6) |write 525 clrl ETEMP_HI(%a6) 526 clrl ETEMP_LO(%a6) 527 bra finish 528 pos_zero: 529 clrl ETEMP(%a6) 530 clrl ETEMP_HI(%a6) 531 clrl ETEMP_LO(%a6) 532 bra finish 533 534 not_spec: 535 fmovemx %fp0-%fp1,-(%a7) |save 536 bsr decbin 537 fmovex %fp0,ETEMP(%a6) |put the unpac 538 fmovemx (%a7)+,%fp0-%fp1 539 fmovel #0,%FPSR |clr f 540 bra finish 541 542 | 543 | Special handling for packed move in: Same r 544 | packed cases, but we must set the FPSR condi 545 | 546 move_unpack: 547 movew ETEMP(%a6),%d0 |get word with 548 bfextu %d0{#20:#12},%d1 |get e 549 cmpiw #0x0fff,%d1 |test for inf 550 bnes mtry_zero |if not equal, 551 bfextu %d0{#17:#3},%d1 |get SE and y 552 cmpiw #7,%d1 |SE and y bits 553 bnes mtry_zero |if not on, it 554 |input is of the special cases of inf and NaN 555 tstl ETEMP_HI(%a6) |check ms mant 556 bnes mfix_nan |if no 557 tstl ETEMP_LO(%a6) |check ls mant 558 bnes mfix_nan |if no 559 |input is inf 560 orl #inf_mask,USER_FPSR(%a6) |set 561 tstl ETEMP(%a6) |check sign 562 bge finish 563 orl #neg_mask,USER_FPSR(%a6) |set 564 bra finish |special alrea 565 mfix_nan: 566 orl #nan_mask,USER_FPSR(%a6) |set 567 moveb #nan_tag,STAG(%a6) |set s 568 btstb #signan_bit,ETEMP_HI(%a6) |tes 569 bnes mn_snan 570 orl #snaniop_mask,USER_FPSR(%a6) | 571 btstb #snan_bit,FPCR_ENABLE(%a6) |te 572 bnes mn_snan 573 bsetb #signan_bit,ETEMP_HI(%a6) |for 574 mn_snan: 575 tstl ETEMP(%a6) |check for sig 576 bge finish |if clr, go on 577 orl #neg_mask,USER_FPSR(%a6) |set 578 bra finish 579 580 mtry_zero: 581 movew ETEMP_EX+2(%a6),%d0 |get word 582 andiw #0x000f,%d0 |clear all but 583 tstw %d0 |check for zer 584 bnes mnot_spec 585 tstl ETEMP_HI(%a6) |check words 3 586 bnes mnot_spec 587 tstl ETEMP_LO(%a6) |check words 1 588 bnes mnot_spec 589 tstl ETEMP(%a6) |test sign of 590 bges mpos_zero 591 orl #neg_mask+z_mask,USER_FPSR(%a6 592 movel #0x80000000,ETEMP(%a6) |write 593 clrl ETEMP_HI(%a6) 594 clrl ETEMP_LO(%a6) 595 bras finish 596 mpos_zero: 597 orl #z_mask,USER_FPSR(%a6) |set Z 598 clrl ETEMP(%a6) 599 clrl ETEMP_HI(%a6) 600 clrl ETEMP_LO(%a6) 601 bras finish 602 603 mnot_spec: 604 fmovemx %fp0-%fp1,-(%a7) |save 605 bsr decbin 606 fmovex %fp0,ETEMP(%a6) 607 | ;put the unpac 608 fmovemx (%a7)+,%fp0-%fp1 609 610 finish: 611 movew CMDREG1B(%a6),%d0 |get t 612 andw #0xfbff,%d0 |change the so 613 | ;extended (was 614 movew %d0,CMDREG1B(%a6) |write 615 | ;we need to do 616 | ;re-execute th 617 | ;another packe 618 619 fix_stag: 620 |Converted result is now in etemp on fsave sta 621 |tag (stag) 622 | if (ete =$7fff) then INF or NAN 623 | if (etemp = $x.0----0) then 624 | stag = INF 625 | else 626 | stag = NAN 627 | else 628 | if (ete = $0000) then 629 | stag = ZERO 630 | else 631 | stag = NORM 632 | 633 | Note also that the etemp_15 bit (just right 634 | be set accordingly. 635 | 636 movew ETEMP_EX(%a6),%d1 637 andiw #0x7fff,%d1 |strip s 638 cmpw #0x7fff,%d1 639 bnes z_or_nrm 640 movel ETEMP_HI(%a6),%d1 641 bnes is_nan 642 movel ETEMP_LO(%a6),%d1 643 bnes is_nan 644 is_inf: 645 moveb #0x40,STAG(%a6) 646 movel #0x40,%d0 647 rts 648 is_nan: 649 moveb #0x60,STAG(%a6) 650 movel #0x60,%d0 651 rts 652 z_or_nrm: 653 tstw %d1 654 bnes is_nrm 655 is_zro: 656 | For a zero, set etemp_15 657 moveb #0x30,STAG(%a6) 658 movel #0x20,%d0 659 rts 660 is_nrm: 661 | For a norm, check if the exp <= $3fff; if so 662 cmpiw #0x3fff,%d1 663 bles set_bit15 664 moveb #0,STAG(%a6) 665 bras end_is_nrm 666 set_bit15: 667 moveb #0x10,STAG(%a6) 668 end_is_nrm: 669 movel #0,%d0 670 end_fix: 671 rts 672 673 end_get: 674 rts 675 |end
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.