intr.c
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 723 行 · 第 1/2 页
C
723 行
#ifndef lintstatic char *sccsid = " @(#)intr.c 1.2 (ULTRIX) 1/15/86";#endif lint/************************************************************************ * * * Copyright (c) 1986 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * This software is derived from software received from the * * University of California, Berkeley, and from Bell * * Laboratories. Use, duplication, or disclosure is subject to * * restrictions under license agreements with University of * * California and with AT&T. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//************************************************************************** Modification History** David Metsky 14-Jan-86** 001 Replaced old version with BSD 4.3 version as part of upgrade.** Based on: intr.c 5.2 8/29/85**************************************************************************//* * intr.c * * Routines for handling intrinsic functions, f77 compiler pass 1, 4.2 BSD. * * University of Utah CS Dept modification history: * * $Log: intr.c,v $ * Revision 5.2 85/08/10 04:39:23 donn * Various changes from Jerry Berkman. We now call the new builtin log10() * instead of the f77 library emulations; we figure out that builtins will * return type double instead of type float; we get rid of lots of * undocumented material; we ifdef 66 code and handle -r8/double flag. * * Revision 5.1 85/08/10 03:47:37 donn * 4.3 alpha * * Revision 1.4 85/02/22 00:54:59 donn * Mark intrinsic functions as having storage class STGINTR. builtin() * always returns STGEXT nodes. Notice that the reference to the function * in the external symbol table still uses STGEXT... I hope this is right. * * Revision 1.3 85/01/15 21:05:40 donn * Changes to distinguish explicit from implicit conversions with intrconv(). * * Revision 1.2 84/12/15 01:02:33 donn * Added a case for an integer*4 result from len() in inline(). Previously * only -i2 provoked len() inline, sigh. * */#include "defs.h"extern ftnint intcon[14];extern double realcon[6];union { int ijunk; struct Intrpacked bits; } packed;struct Intrbits { int intrgroup /* :3 */; int intrstuff /* result type or number of specifics */; int intrno /* :7 */; };LOCAL struct Intrblock { char intrfname[VL]; struct Intrbits intrval; } intrtab[ ] ={"int", { INTRCONV, TYLONG },"real", { INTRCONV, TYREAL },"dble", { INTRCONV, TYDREAL },"dreal", { INTRCONV, TYDREAL },"cmplx", { INTRCONV, TYCOMPLEX },"dcmplx", { INTRCONV, TYDCOMPLEX },"ifix", { INTRCONV, TYLONG },"idint", { INTRCONV, TYLONG },"float", { INTRCONV, TYREAL },"dfloat", { INTRCONV, TYDREAL },"sngl", { INTRCONV, TYREAL },"ichar", { INTRCONV, TYLONG },"char", { INTRCONV, TYCHAR },"max", { INTRMAX, TYUNKNOWN },"max0", { INTRMAX, TYLONG },"amax0", { INTRMAX, TYREAL },"max1", { INTRMAX, TYLONG },"amax1", { INTRMAX, TYREAL },"dmax1", { INTRMAX, TYDREAL },"and", { INTRBOOL, TYUNKNOWN, OPBITAND },"or", { INTRBOOL, TYUNKNOWN, OPBITOR },"xor", { INTRBOOL, TYUNKNOWN, OPBITXOR },"not", { INTRBOOL, TYUNKNOWN, OPBITNOT },"lshift", { INTRBOOL, TYUNKNOWN, OPLSHIFT },"rshift", { INTRBOOL, TYUNKNOWN, OPRSHIFT },"min", { INTRMIN, TYUNKNOWN },"min0", { INTRMIN, TYLONG },"amin0", { INTRMIN, TYREAL },"min1", { INTRMIN, TYLONG },"amin1", { INTRMIN, TYREAL },"dmin1", { INTRMIN, TYDREAL },"aint", { INTRGEN, 2, 0 },"dint", { INTRSPEC, TYDREAL, 1 },"anint", { INTRGEN, 2, 2 },"dnint", { INTRSPEC, TYDREAL, 3 },"nint", { INTRGEN, 4, 4 },"idnint", { INTRGEN, 2, 6 },"abs", { INTRGEN, 6, 8 },"iabs", { INTRGEN, 2, 9 },"dabs", { INTRSPEC, TYDREAL, 11 },"cabs", { INTRSPEC, TYREAL, 12 },"zabs", { INTRSPEC, TYDREAL, 13 },"cdabs", { INTRSPEC, TYDREAL, 13 },"mod", { INTRGEN, 4, 14 },"amod", { INTRSPEC, TYREAL, 16 },"dmod", { INTRSPEC, TYDREAL, 17 },"sign", { INTRGEN, 4, 18 },"isign", { INTRGEN, 2, 19 },"dsign", { INTRSPEC, TYDREAL, 21 },"dim", { INTRGEN, 4, 22 },"idim", { INTRGEN, 2, 23 },"ddim", { INTRSPEC, TYDREAL, 25 },"dprod", { INTRSPEC, TYDREAL, 26 },"len", { INTRSPEC, TYLONG, 27 },"index", { INTRSPEC, TYLONG, 29 },"imag", { INTRGEN, 2, 31 },"aimag", { INTRSPEC, TYREAL, 31 },"dimag", { INTRSPEC, TYDREAL, 32 },"conjg", { INTRGEN, 2, 33 },"dconjg", { INTRSPEC, TYDCOMPLEX, 34 },"sqrt", { INTRGEN, 4, 35 },"dsqrt", { INTRSPEC, TYDREAL, 36 },"csqrt", { INTRSPEC, TYCOMPLEX, 37 },"zsqrt", { INTRSPEC, TYDCOMPLEX, 38 },"cdsqrt", { INTRSPEC, TYDCOMPLEX, 38 },"exp", { INTRGEN, 4, 39 },"dexp", { INTRSPEC, TYDREAL, 40 },"cexp", { INTRSPEC, TYCOMPLEX, 41 },"zexp", { INTRSPEC, TYDCOMPLEX, 42 },"cdexp", { INTRSPEC, TYDCOMPLEX, 42 },"log", { INTRGEN, 4, 43 },"alog", { INTRSPEC, TYREAL, 43 },"dlog", { INTRSPEC, TYDREAL, 44 },"clog", { INTRSPEC, TYCOMPLEX, 45 },"zlog", { INTRSPEC, TYDCOMPLEX, 46 },"cdlog", { INTRSPEC, TYDCOMPLEX, 46 },"log10", { INTRGEN, 2, 47 },"alog10", { INTRSPEC, TYREAL, 47 },"dlog10", { INTRSPEC, TYDREAL, 48 },"sin", { INTRGEN, 4, 49 },"dsin", { INTRSPEC, TYDREAL, 50 },"csin", { INTRSPEC, TYCOMPLEX, 51 },"zsin", { INTRSPEC, TYDCOMPLEX, 52 },"cdsin", { INTRSPEC, TYDCOMPLEX, 52 },"cos", { INTRGEN, 4, 53 },"dcos", { INTRSPEC, TYDREAL, 54 },"ccos", { INTRSPEC, TYCOMPLEX, 55 },"zcos", { INTRSPEC, TYDCOMPLEX, 56 },"cdcos", { INTRSPEC, TYDCOMPLEX, 56 },"tan", { INTRGEN, 2, 57 },"dtan", { INTRSPEC, TYDREAL, 58 },"asin", { INTRGEN, 2, 59 },"dasin", { INTRSPEC, TYDREAL, 60 },"acos", { INTRGEN, 2, 61 },"dacos", { INTRSPEC, TYDREAL, 62 },"atan", { INTRGEN, 2, 63 },"datan", { INTRSPEC, TYDREAL, 64 },"atan2", { INTRGEN, 2, 65 },"datan2", { INTRSPEC, TYDREAL, 66 },"sinh", { INTRGEN, 2, 67 },"dsinh", { INTRSPEC, TYDREAL, 68 },"cosh", { INTRGEN, 2, 69 },"dcosh", { INTRSPEC, TYDREAL, 70 },"tanh", { INTRGEN, 2, 71 },"dtanh", { INTRSPEC, TYDREAL, 72 },"lge", { INTRSPEC, TYLOGICAL, 73},"lgt", { INTRSPEC, TYLOGICAL, 75},"lle", { INTRSPEC, TYLOGICAL, 77},"llt", { INTRSPEC, TYLOGICAL, 79},"", { INTREND, 0, 0} };LOCAL struct Specblock { char atype; char rtype; char nargs; char spxname[XL]; char othername; /* index into callbyvalue table */ } spectab[ ] ={ { TYREAL,TYREAL,1,"r_int" }, { TYDREAL,TYDREAL,1,"d_int" }, { TYREAL,TYREAL,1,"r_nint" }, { TYDREAL,TYDREAL,1,"d_nint" }, { TYREAL,TYSHORT,1,"h_nint" }, { TYREAL,TYLONG,1,"i_nint" }, { TYDREAL,TYSHORT,1,"h_dnnt" }, { TYDREAL,TYLONG,1,"i_dnnt" }, { TYREAL,TYREAL,1,"r_abs" }, { TYSHORT,TYSHORT,1,"h_abs" }, { TYLONG,TYLONG,1,"i_abs" }, { TYDREAL,TYDREAL,1,"d_abs" }, { TYCOMPLEX,TYREAL,1,"c_abs" }, { TYDCOMPLEX,TYDREAL,1,"z_abs" }, { TYSHORT,TYSHORT,2,"h_mod" }, { TYLONG,TYLONG,2,"i_mod" }, { TYREAL,TYREAL,2,"r_mod" }, { TYDREAL,TYDREAL,2,"d_mod" }, { TYREAL,TYREAL,2,"r_sign" }, { TYSHORT,TYSHORT,2,"h_sign" }, { TYLONG,TYLONG,2,"i_sign" }, { TYDREAL,TYDREAL,2,"d_sign" }, { TYREAL,TYREAL,2,"r_dim" }, { TYSHORT,TYSHORT,2,"h_dim" }, { TYLONG,TYLONG,2,"i_dim" }, { TYDREAL,TYDREAL,2,"d_dim" }, { TYREAL,TYDREAL,2,"d_prod" }, { TYCHAR,TYSHORT,1,"h_len" }, { TYCHAR,TYLONG,1,"i_len" }, { TYCHAR,TYSHORT,2,"h_indx" }, { TYCHAR,TYLONG,2,"i_indx" }, { TYCOMPLEX,TYREAL,1,"r_imag" }, { TYDCOMPLEX,TYDREAL,1,"d_imag" }, { TYCOMPLEX,TYCOMPLEX,1,"r_cnjg" }, { TYDCOMPLEX,TYDCOMPLEX,1,"d_cnjg" }, { TYREAL,TYREAL,1,"r_sqrt", 1 }, { TYDREAL,TYDREAL,1,"d_sqrt", 1 }, { TYCOMPLEX,TYCOMPLEX,1,"c_sqrt" }, { TYDCOMPLEX,TYDCOMPLEX,1,"z_sqrt" }, { TYREAL,TYREAL,1,"r_exp", 2 }, { TYDREAL,TYDREAL,1,"d_exp", 2 }, { TYCOMPLEX,TYCOMPLEX,1,"c_exp" }, { TYDCOMPLEX,TYDCOMPLEX,1,"z_exp" }, { TYREAL,TYREAL,1,"r_log", 3 }, { TYDREAL,TYDREAL,1,"d_log", 3 }, { TYCOMPLEX,TYCOMPLEX,1,"c_log" }, { TYDCOMPLEX,TYDCOMPLEX,1,"z_log" }, { TYREAL,TYREAL,1,"r_lg10", 14 }, { TYDREAL,TYDREAL,1,"d_lg10", 14 }, { TYREAL,TYREAL,1,"r_sin", 4 }, { TYDREAL,TYDREAL,1,"d_sin", 4 }, { TYCOMPLEX,TYCOMPLEX,1,"c_sin" }, { TYDCOMPLEX,TYDCOMPLEX,1,"z_sin" }, { TYREAL,TYREAL,1,"r_cos", 5 }, { TYDREAL,TYDREAL,1,"d_cos", 5 }, { TYCOMPLEX,TYCOMPLEX,1,"c_cos" }, { TYDCOMPLEX,TYDCOMPLEX,1,"z_cos" }, { TYREAL,TYREAL,1,"r_tan", 6 }, { TYDREAL,TYDREAL,1,"d_tan", 6 }, { TYREAL,TYREAL,1,"r_asin", 7 }, { TYDREAL,TYDREAL,1,"d_asin", 7 }, { TYREAL,TYREAL,1,"r_acos", 8 }, { TYDREAL,TYDREAL,1,"d_acos", 8 }, { TYREAL,TYREAL,1,"r_atan", 9 }, { TYDREAL,TYDREAL,1,"d_atan", 9 }, { TYREAL,TYREAL,2,"r_atn2", 10 }, { TYDREAL,TYDREAL,2,"d_atn2", 10 }, { TYREAL,TYREAL,1,"r_sinh", 11 }, { TYDREAL,TYDREAL,1,"d_sinh", 11 }, { TYREAL,TYREAL,1,"r_cosh", 12 }, { TYDREAL,TYDREAL,1,"d_cosh", 12 }, { TYREAL,TYREAL,1,"r_tanh", 13 }, { TYDREAL,TYDREAL,1,"d_tanh", 13 }, { TYCHAR,TYLOGICAL,2,"hl_ge" }, { TYCHAR,TYLOGICAL,2,"l_ge" }, { TYCHAR,TYLOGICAL,2,"hl_gt" }, { TYCHAR,TYLOGICAL,2,"l_gt" }, { TYCHAR,TYLOGICAL,2,"hl_le" }, { TYCHAR,TYLOGICAL,2,"l_le" }, { TYCHAR,TYLOGICAL,2,"hl_lt" }, { TYCHAR,TYLOGICAL,2,"l_lt" }, { TYDREAL,TYDREAL,2,"d_dprod"} /* dprod() with dblflag */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?