📄 dependent.il
字号:
/* @(#)dependent.il 1.1 92/07/30 SMI *//* * Copyright (c) 1989 by Sun Microsystems, Inc. */| Sun-3 FPA+ templates for new sqrt and complex instructions.| Comment out if using original Sun-3 FPA. .inline _hypot,16 fpmoved sp@+,fpa0 fphypotd sp@+,fpa0,fpa1 fpmoved fpa1,d0:d1 .end .inline _d_hypot_,8 movl sp@+,a0 fpmoved a0@,fpa0 movl sp@+,a1 fphypotd a1@,fpa0,fpa1 fpmoved fpa1,d0:d1 .end .inline _r_hypot_,8 movl sp@+,a0 fpmoves a0@,fpa0 movl sp@+,a1 fphypots a1@,fpa0,fpa1 fpmoves fpa1,d0 .end .inline _z_abs,4 movl sp@+,a0 fpmoved a0@+,fpa0 fphypotd a0@,fpa0,fpa1 fpmoved fpa1,d0:d1 .end .inline _c_abs,4 movl sp@+,a0 fpcabsd a0@,fpa1 fpmoves fpa1,d0 .end|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| void| _Fc_mult(c, a, b)| complex *c, *a, *b .inline __Fc_mult,12 movl sp@+,a1 | c movl sp@+,a0 | a fpmoved a0@,fpa1 | fpa1 gets a movl sp@+,a0 | b fpcmuld a0@,fpa1,fpa2 | fpa0 gets a*b fpmoved fpa2,a1@ | c gets product .end |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| void| _Fc_minus(c, a, b)| complex *c, *a, *b .inline __Fc_minus,12| 30 c->real = a->real - b->real movl sp@+,a1 | c movl sp@+,a0 | a fpmoved a0@,fpa0 | fpa0 gets a movl sp@+,a0 | b fpcsubd a0@,fpa0,fpa2 | fpa0 gets a-b fpmoved fpa2,a1@ | c gets product .end|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| void| _Fc_add(c, a, b)| complex *c, *a, *b | { .inline __Fc_add,12| 30 c->real = a->real + b->real movl sp@+,a1 | c movl sp@+,a0 | a fpmoved a0@,fpa1 | fpa0 gets a movl sp@+,a0 | b fpcaddd a0@,fpa1,fpa2 | fpa0 gets a+b fpmoved fpa2,a1@ | c gets product .end |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| void| _Fc_div(c, a, b)| complex *c, *a, *b .inline __Fc_div,12| 30 c->real = a->real / b->real movl sp@+,a1 | c movl sp@+,a0 | a fpmoved a0@,fpa1 | fpa0 gets a movl sp@+,a0 | b fpcdivd a0@,fpa1,fpa2 | fpa0 gets a/b fpmoved fpa2,a1@ | c gets product .end .inline Wsqrts,0 fpsqrts d0,fpa0 fpmoves fpa0,d0 .end .inline Wsqrtd,0 fpsqrtd d0:d1,fpa0 fpmoved fpa0,d0:d1 .end .inline _sqrt,8 fpsqrtd sp@+,fpa0 fpmoved fpa0,d0:d1 .end .inline _d_sqrt_,4 movl sp@+,a0 fpsqrtd a0@,fpa0 fpmoved fpa0,d0:d1 .end .inline _Fsqrt,4 fpsqrts sp@+,fpa0 fpmoves fpa0,d0 .end .inline _r_sqrt_,4 movl sp@+,a0 fpsqrts a0@,fpa0 fpmoves fpa0,d0 .end .inline _d_sqrt,4 movl sp@+,a0 fpsqrtd a0@,fpa0 fpmoved fpa0,d0:d1 .end .inline _r_sqrt,4 movl sp@+,a0 fpsqrts a0@,fpa0 fpmoves fpa0,d0 .end| End new FPA+ instruction templates. *//* -ffpa templates for documented libm functions */#define FPA_LIBM(f,g) /* double _f ( double x ) ; */ \ .inline _/**/f,8 ; \ fpmoved sp@+,fpa0 ; \ fp/**/g/**/d fpa0,fpa0 ; \ fpmoved fpa0,d0:d1 ; \ .end ; \ .inline _d_/**/f/**/_,4 ; /* double _d_f_ ( double *x ) ; */ \ movl sp@+,a0 ; \ fpmoved a0@,fpa0 ; \ fp/**/g/**/d fpa0,fpa0 ; \ fpmoved fpa0,d0:d1 ; \ .end ; \ .inline _r_/**/f/**/_,4 ; /* float _r_f_ (float *x ) ; */ \ movl sp@+,a0 ; \ fpmoves a0@,fpa0 ; \ fp/**/g/**/s fpa0,fpa0 ; \ fpmoves fpa0,d0 ; \ .end ; \ FPA_LIBM(sin,sin) FPA_LIBM(cos,cos) FPA_LIBM(atan,atan) FPA_LIBM(exp,etox) FPA_LIBM(expm1,etoxm1) FPA_LIBM(log,logn) FPA_LIBM(log1p,lognp1) .inline _anint,8 movl sp@+,d0 movl sp@+,d1 jsr Wanintd .end .inline _d_anint_,4 movl sp@+,a0 movl a0@+,d0 movl a0@,d1 jsr Wanintd .end .inline _r_anint_,4 movl sp@+,a0 movl a0@,d0 jsr Wanints .end .inline _nint,8 movl sp@+,d0 movl sp@+,d1 jsr Wnintd .end .inline _id_nint_,4 movl sp@+,a0 movl a0@+,d0 movl a0@,d1 jsr Wnintd .end .inline _ir_nint_,4 movl sp@+,a0 movl a0@,d0 jsr Wnints .end .inline _irint,8 fpmove fpamode,d1 andl #0xf,d1 | Clear junk bits. movl d1,d0 andb #0xd,d0 | Clear integer convert toward zero mode. fpmove d0,fpamode fpdtol sp@+,fpa0 fpmoves fpa0,d0 fpmove d1,fpamode | Restore FPA mode. .end .inline _id_irint_,4 movl sp@+,a0 fpmove fpamode,d1 andl #0xf,d1 | Clear junk bits. movl d1,d0 andb #0xd,d0 | Clear integer convert toward zero mode. fpmove d0,fpamode fpdtol a0@,fpa0 fpmoves fpa0,d0 fpmove d1,fpamode | Restore FPA mode. .end .inline _ir_irint_,4 movl sp@+,a0 fpmove fpamode,d1 andl #0xf,d1 | Clear junk bits. movl d1,d0 andb #0xd,d0 | Clear integer convert toward zero mode. fpmove d0,fpamode fpstol a0@,fpa0 fpmoves fpa0,d0 fpmove d1,fpamode | Restore FPA mode. .end .inline _ceil,8 movl sp@+,d0 movl sp@+,d1 jsr Wceild .end .inline _floor,8 movl sp@+,d0 movl sp@+,d1 jsr Wfloord .end .inline _d_floor_,4 movl sp@+,a0 movl a0@+,d0 movl a0@,d1 jsr Wfloord .end .inline _d_ceil_,4 movl sp@+,a0 movl a0@+,d0 movl a0@,d1 jsr Wceild .end .inline _r_floor_,4 movl sp@+,a0 movl a0@,d0 jsr Wfloors .end .inline _r_ceil_,4 movl sp@+,a0 movl a0@,d0 jsr Wceils .end .inline _hypot,16 fmoved sp@+,fp0 fmoved sp@+,fp1 fmulx fp0,fp0 fmulx fp1,fp1 faddx fp1,fp0 fsqrtx fp0,fp0 fmoved fp0,sp@- movl sp@+,d0 movl sp@+,d1 .end .inline _d_hypot_,8 movl sp@+,a0 movl sp@+,a1 fmoved a0@,fp0 fmoved a1@,fp1 fmulx fp0,fp0 fmulx fp1,fp1 faddx fp1,fp0 fsqrtx fp0,fp0 fmoved fp0,sp@- movl sp@+,d0 movl sp@+,d1 .end .inline _z_abs,4 movl sp@+,a0 fmoved a0@+,fp0 fmoved a0@,fp1 fmulx fp0,fp0 fmulx fp1,fp1 faddx fp1,fp0 fsqrtx fp0,fp0 fmoved fp0,sp@- movel sp@+,d0 movel sp@+,d1 .end .inline _i_dnnt,4 movl sp@+,a0 movl a0@+,d0 movl a0@,d1 jsr Wnintd .end .inline _i_nint,4 movl sp@+,a0 movl a0@,d0 jsr Wnints .end/* templates for obsolete libm functions */ .inline Wlog10s,0 flog10s d0,fp0 fmoves fp0,d0 .end .inline Wlog10d,0 movl d1,sp@- movl d0,sp@- flog10d sp@+,fp0 fmoved fp0,sp@- movl sp@+,d0 movl sp@+,d1 .end .inline _d_dim,8 movel sp@+,a0 fpmoved a0@,fpa0 movel sp@+,a0 fpsubd a0@,fpa0 fpmoved fpa0,d0:d1 tstl d0 jpl 1f | Branch if positive sign bit. cmpl #0xfff00000,d0 jlt 2f | Branch if finite. jgt 1f | Branch if nan. tstl d1 jne 1f | Branch if nan.2: clrl d0 clrl d11: .end .inline _r_dim,8 movel sp@+,a0 fpmoves a0@,fpa0 movel sp@+,a0 fpsubs a0@,fpa0 fpmoves fpa0,d0 tstl d0 jpl 1f | Branch if positive sign. cmpl #0xff800000,d0 jgt 1f | Branch if nan. clrl d01: .end .inline __Fz_mult,12 movl sp@+,d0 | d0 = c. movl sp@+,a1 | a0 = a. movl sp@+,a0 | a1 = b. fpmoved a1@,fpa0 | fp0 = (a->dreal * b->dreal). fpmuld a0@,fpa0 fpmoved a1@(8),fpa1 | fp1 = (a->dimag * b->dimag). fpmuld a0@(8),fpa1 fpsubd fpa1,fpa0 | c->dreal = fp0 - fp1. exg d0,a0 fpmoved fpa0,a0@ exg d0,a0 fpmoved a1@,fpa0 | fp0 = (a->dreal * b->dimag). fpmuld a0@(8),fpa0 fpmoved a1@(8),fpa1 | fp1 = (a->dimag * b->dreal). fpmuld a0@,fpa1 fpaddd fpa1,fpa0 | c->dimag = fp0 + fp1. movl d0,a0 fpmoved fpa0,a0@(8) .end .inline __Fz_minus,12 movl sp@+,d0 | d0 = c. movl sp@+,a0 | a0 = a. movl sp@+,a1 | a1 = b. fpmoved a0@+,fpa0 | fp0 = a->dreal - b->dreal. fpsubd a1@+,fpa0 fpmoved a0@,fpa1 | fp1 = a->dimag - b->dimag. fpsubd a1@,fpa1 movl d0,a0 fpmoved fpa0,a0@+ | c->dreal = fp0. fpmoved fpa1,a0@ | c->dimag = fp1. .end .inline __Fz_add,12 movl sp@+,d0 | d0 = c. movl sp@+,a0 | a0 = a. movl sp@+,a1 | a1 = b. fpmoved a0@+,fpa0 | fp0 = a->dreal + b->dreal. fpaddd a1@+,fpa0 fpmoved a0@,fpa1 | fp1 = a->dimag + b->dimag. fpaddd a1@,fpa1 movl d0,a0 fpmoved fpa0,a0@+ | c->dreal = fp0. fpmoved fpa1,a0@ | c->dimag = fp1. .end .inline __Ff_conv_z,8 movl sp@+,a0 fpstod sp@+,fpa0 fpmoved fpa0,a0@+ clrl a0@+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -