00001 // Strings for the OPER enum. Ugh! I wish C could print enums properly. 00002 // Only needed for the dotty file (a debugging nicety) so don't be 00003 // surprised if the strings become out of date. 00004 00005 char* operStrings[] = { 00006 "opPlus", // Binary addition 00007 "opMinus", // Binary subtraction 00008 "opMult", // Multiplication 00009 "opDiv", // Integer division 00010 "opFPlus", // Binary addition(single floats) 00011 "opFMinus", // Binary subtraction(single floats) 00012 "opFMult", // Multiplication(single floats) 00013 "opFDiv", // (single floats) 00014 "opFNeg", // Floating point negate 00015 "opFPlusd", // addition(double floats) 00016 "opFMinusd", // subtraction(double floats) 00017 "opFMultd", // Multiplication(double floats) 00018 "opFDivd", // Integer division(double floats) 00019 "opFPlusq", // addition(quad floats) 00020 "opFMinusq", // subtraction(quad floats) 00021 "opFMultq", // Multiplication(quad floats) 00022 "opFDivq", // division(quad floats) 00023 "opFMultsd", // Multiplication(single floats--> double floats) 00024 "opFMultdq", // Multiplication(single floats--> double floats) 00025 "opSQRTs", // sqrt of a single 00026 "opSQRTd", // sqrt of a double 00027 "opSQRTq", // sqrt of a quad 00028 00029 "opMults", // Multiply signed 00030 "opDivs", // Divide signed 00031 "opMod", // Remainder of integer division 00032 "opMods", // Remainder of signed integer division 00033 "opNeg", // Unary minus 00034 00035 "opAnd", // Logical and 00036 "opOr", // Logical or 00037 "opEquals", // Equality (logical) 00038 "opNotEqual", // Logical != 00039 "opLess", // Logical less than (signed) 00040 "opGtr", // Logical greater than (signed) 00041 "opLessEq", // Logical <= (signed) 00042 "opGtrEq", // Logical >= (signed) 00043 "opLessUns", // Logical less than (unsigned) 00044 "opGtrUns", // Logical greater than (unsigned) 00045 "opLessEqUns", // Logical <= (unsigned) 00046 "opGtrEqUns", // Logical >= (unsigned) 00047 "opUpper", // Greater signed or unsigned; used by switch code 00048 "opLower", // Less signed or unsigned; used by switch code 00049 00050 "opNot", // Bitwise inversion 00051 "opLNot", // Logical not 00052 "opSignExt", // Sign extend 00053 "opBitAnd", // Bitwise and 00054 "opBitOr", // Bitwise or 00055 "opBitXor", // Bitwise xor 00056 "opShiftL", // Left shift 00057 "opShiftR", // Right shift 00058 "opShiftRA", // Right shift arithmetic 00059 "opRotateL", // Rotate left 00060 "opRotateR", // Rotate right 00061 "opRotateLC", // Rotate left through carry 00062 "opRotateRC", // Rotate right through carry 00063 "opTargetInst", // Target specific instruction (Unary) 00064 00065 "opTypedExp", // Typed expression 00066 "opNamedExp", // Named expression (binary, subExp1 = Const("name"), subExp2 = exp) 00067 "opGuard", // Guarded expression (should be assignment) 00068 "opComma", // Separate expressions in a list (e.g. params) 00069 "opFlagCall", // A flag call (Binary with string and params) 00070 "opFlagDef", // A flag function definition (class FlagDef) 00071 "opList", // A binary, with expression (1) and next element 00072 "opNameTable", // A table of strings 00073 "opExpTable", // A table of expressions 00074 "opOpTable", // A table of operators 00075 "opSuccessor", // Get the successor of this register parameter 00076 00077 "opTern", // Ternary (i.e. ? : ) 00078 "opAt", // Bit extraction (expr@first:last) 00079 00080 "opRegOf", // Represents r[] 00081 "opMemOf", // Represents m[] 00082 "opAddrOf", // Represents a[] 00083 "opWildMemOf", // m[wild], 00084 "opWildRegOf", // r[wild], 00085 "opWildAddrOf", // a[wild], 00086 "opDefineAll", // a wild definition 00087 "opVar", // Represents l[] (recovered locations) 00088 "opPhi", // Represents phi(a1, a2, a3) .. ie SSA form merging 00089 "opSubscript", // Represents subscript(e, n) .. ie SSA renaming 00090 "opParam", // Parameter param`' 00091 "opArg", // Used a temporary for arguments to calls 00092 "opLocal", // Represents a local, takes a string 00093 "opGlobal", // Represents a global; takes a string 00094 "opExpand", // Expandable expression 00095 "opMemberAccess", // . and -> in C 00096 "opArrayIndex", // [] in C 00097 "opTemp", // Temp register name 00098 "opSize", // Size override 00099 "opCastIntStar", // Cast to int* 00100 "opPostVar", // Post-instruction variable marker (unary with 00101 "opMachFtr", // A Unary with Const(string) representing a machine specific feature (register, instruction 00102 // or whatever; the analysis better understand it and transform it away) 00103 00104 00105 "opTruncu", // Integer truncate (unsigned) 00106 "opTruncs", // Integer truncate (signed) 00107 "opZfill", // Integer zero fill 00108 "opSgnEx", // Integer sign extend 00109 00110 "opFsize", // Floating point size conversion 00111 "opItof", // Integer to floating point (and size) conversion 00112 "opFtoi", // Floating point to integer (and size) conversion 00113 "opFround", // Floating point to nearest float conversion 00114 "opFtrunc", // Floating point to next lower e.g. 3.01 -> 3.00 00115 "opFabs", // Floating point absolute function 00116 "opForceInt", // Forcibly change current type to int/flt, 00117 "opForceFlt", // without changing any of the bits 00118 "opFpush", // Floating point stack push 00119 "opFpop", // Floating point stack pop 00120 00121 "opSin", // sine 00122 "opCos", // cosine 00123 "opTan", // tangent 00124 "opArcTan", // inverse tangent 00125 "opLog2", // logarithm to base 2 00126 "opLog10", // logarithm to base 10 00127 "opLoge", // logarithm to base e 00128 "opPow", // raise to a power 00129 "opSqrt", // square root 00130 "opExecute", // Execute instruction at(addr) 00131 00132 "opIntConst", // integer constant 00133 "opLongConst", // long integer constant 00134 "opFltConst", // floating point constant 00135 "opStrConst", // string constant 00136 "opFuncConst", // function constant (pointer to function) 00137 "opWildIntConst", // an integer constant whose value is wild 00138 "opWildStrConst", // a string constant whose value is wild 00139 00140 00141 "opPC", // program counter 00142 "opAFP", // abstract frame pointer 00143 "opAGP", // abstract global pointer 00144 "opNil", // Nil list 00145 "opFlags", // Integer flags 00146 "opFflags", // Floating point flags 00147 00148 "opAnull", // Anull "variable" 00149 00150 00151 "opHLCTI", // High level Control transfer instruction 00152 "opDEFINE", // Define Type of use with lexer 00153 00154 "opTrue", // Logical true 00155 "opFalse", // Logical false 00156 "opTypeOf", // Makes a type variable from a location 00157 "opKindOf", 00158 "opTypeVal", // Makes a type value 00159 00160 "opInitValueOf", // The initial value of a location, typically the stack pointer 00161 00162 "opZF", // zero flag 00163 "opCF", // carry flag 00164 "opNF", // negative flag 00165 "opOF", // overflow flag 00166 "opDF", // pentium Direction (=Down) flag 00167 "opFZF", // floating point zero flag 00168 "opFLF", // floating point less flag 00169 "opFGF", // floating point greater flag 00170 "opCTI", // Control transfer instruction (boolean) 00171 "opNEXT", // Next PC pseudo-register 00172 }; 00173 00174 00175