00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 inline mUINT32
00040 OPERATOR_is_scf (OPERATOR op)
00041 {
00042 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00043 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_scf;
00044 }
00045
00046
00047 inline mUINT32
00048 OPERATOR_is_stmt (OPERATOR op)
00049 {
00050 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00051 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_stmt;
00052 }
00053
00054
00055 inline mUINT32
00056 OPERATOR_is_expression(OPERATOR op)
00057 {
00058 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00059 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_expression;
00060 }
00061
00062
00063 inline mUINT32
00064 OPERATOR_is_leaf (OPERATOR op)
00065 {
00066 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00067 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_leaf;
00068 }
00069
00070
00071 inline mUINT32
00072 OPERATOR_is_store (OPERATOR op)
00073 {
00074 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00075 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_store;
00076 }
00077
00078
00079 inline mUINT32
00080 OPERATOR_is_load (OPERATOR op)
00081 {
00082 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00083 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_load;
00084 }
00085
00086
00087 inline mUINT32
00088 OPERATOR_is_call(OPERATOR op)
00089 {
00090 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00091 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_call;
00092 }
00093
00094
00095 inline mUINT32
00096 OPERATOR_is_compare (OPERATOR op)
00097 {
00098 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00099 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_compare;
00100 }
00101
00102
00103 inline mUINT32
00104 OPERATOR_is_non_scf (OPERATOR op)
00105 {
00106 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00107 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_non_scf;
00108 }
00109
00110
00111 inline mUINT32
00112 OPERATOR_is_boolean (OPERATOR op)
00113 {
00114 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00115 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_boolean;
00116 }
00117
00118
00119 inline mUINT32
00120 OPERATOR_is_endsbb (OPERATOR op)
00121 {
00122 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00123 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_endsbb;
00124 }
00125
00126
00127 inline mUINT32
00128 OPERATOR_is_comp_unit_if (OPERATOR op)
00129 {
00130 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00131 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_comp_unit_if;
00132 }
00133
00134
00135 inline mUINT32
00136 OPERATOR_is_not_executable (OPERATOR op)
00137 {
00138 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00139 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_not_executable;
00140 }
00141
00142
00143 inline mUINT32
00144 OPERATOR_is_prefetch (OPERATOR op)
00145 {
00146 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00147 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_prefetch;
00148 }
00149
00150
00151 inline mUINT32
00152 OPERATOR_has_next_prev (OPERATOR op)
00153 {
00154 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00155 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_next_prev;
00156 }
00157
00158
00159 inline mUINT32
00160 OPERATOR_has_sym (OPERATOR op)
00161 {
00162 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00163 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_sym;
00164 }
00165
00166
00167 inline mUINT32
00168 OPERATOR_has_label (OPERATOR op)
00169 {
00170 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00171 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_label;
00172 }
00173
00174
00175 inline mUINT32
00176 OPERATOR_has_num_entries (OPERATOR op)
00177 {
00178 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00179 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_num_entries;
00180 }
00181
00182
00183 inline mUINT32
00184 OPERATOR_has_offset (OPERATOR op)
00185 {
00186 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00187 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_offset;
00188 }
00189
00190
00191 inline mUINT32
00192 OPERATOR_has_2offsets (OPERATOR op)
00193 {
00194 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00195 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_2offsets;
00196 }
00197
00198
00199 inline mUINT32
00200 OPERATOR_has_bits (OPERATOR op)
00201 {
00202 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00203 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_bits;
00204 }
00205
00206
00207 inline mUINT32
00208 OPERATOR_has_ndim (OPERATOR op)
00209 {
00210 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00211 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_ndim;
00212 }
00213
00214
00215 inline mUINT32
00216 OPERATOR_has_esize (OPERATOR op)
00217 {
00218 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00219 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_esize;
00220 }
00221
00222
00223 inline mUINT32
00224 OPERATOR_has_value (OPERATOR op)
00225 {
00226 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00227 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_value;
00228 }
00229
00230
00231 inline mUINT32
00232 OPERATOR_has_flags (OPERATOR op)
00233 {
00234 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00235 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_flags;
00236 }
00237
00238
00239 inline mUINT32
00240 OPERATOR_has_inumber (OPERATOR op)
00241 {
00242 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00243 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_inumber;
00244 }
00245
00246
00247 inline mUINT32
00248 OPERATOR_has_1ty (OPERATOR op)
00249 {
00250 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00251 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_1ty;
00252 }
00253
00254
00255 inline mUINT32
00256 OPERATOR_has_2ty (OPERATOR op)
00257 {
00258 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00259 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_2ty;
00260 }
00261
00262
00263 inline mUINT32
00264 OPERATOR_has_ereg_supp (OPERATOR op)
00265 {
00266 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00267 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_ereg_supp;
00268 }
00269
00270
00271 inline mUINT32
00272 OPERATOR_has_barrier (OPERATOR op)
00273 {
00274 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00275 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_barrier;
00276 }
00277
00278
00279 inline mUINT32
00280 OPERATOR_has_last_label (OPERATOR op)
00281 {
00282 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00283 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_last_label;
00284 }
00285
00286
00287 inline mUINT32
00288 OPERATOR_has_field_id (OPERATOR op)
00289 {
00290 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00291 return (mUINT32) OPERATOR_info [op]._flags & OPERATOR_PROPERTY_field_id;
00292 }
00293
00294
00295 inline mINT8
00296 OPERATOR_nkids (OPERATOR op)
00297 {
00298 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00299 return OPERATOR_info [op].nkids;
00300 }
00301
00302
00303 inline OPERATOR_MAPCAT
00304 OPERATOR_mapcat (OPERATOR op)
00305 {
00306 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00307 return OPERATOR_info[op].mapcat;
00308 }
00309
00310
00311 inline BOOL
00312 OPERATOR_is_black_box (OPERATOR op)
00313 {
00314 Is_True(op >= OPERATOR_FIRST && op <= OPERATOR_LAST, ("Bad operator %d", op));
00315 return (op == OPR_IO);
00316 }
00317
00318
00319 #if 0
00320 extern OPCODE OPCODE_is_valid_opcode_table[];
00321 #define OPCODE_MAKE_VALID(x) (OPCODE_is_valid_opcode_table[(x)])
00322 #endif
00323
00324 #if 1
00325 #define Is_Valid_Opcode Is_Valid_Opcode_FUNC
00326 #else
00327 #define Is_Valid_Opcode(opcode) (OPCODE_is_valid_opcode_table[(opcode)]!=OPC_UNKNOWN)
00328 #endif
00329
00330 #ifdef __cplusplus
00331 extern "C" BOOL Is_Valid_Opcode_FUNC (OPCODE op);
00332 BOOL Is_Valid_Opcode_Parts(OPERATOR opr, TYPE_ID rtype, TYPE_ID desc);
00333 #else
00334 extern BOOL Is_Valid_Opcode_FUNC (OPCODE op);
00335 #endif
00336
00337
00338 inline OPERATOR
00339 OPCODE_operator (OPCODE op)
00340 {
00341 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00342 return (OPERATOR) (op & 0xFF);
00343 }
00344
00345
00346 inline TYPE_ID
00347 OPCODE_rtype (OPCODE op)
00348 {
00349 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00350 return (TYPE_ID) ((op >> 8) & 0x1F);
00351 }
00352
00353
00354 inline TYPE_ID
00355 OPCODE_desc (OPCODE op)
00356 {
00357 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00358 return (TYPE_ID) ((op >> 13) & 0x1F);
00359 }
00360
00361 extern char* OPCODE_name (OPCODE op);
00362
00363
00364
00365
00366 inline mUINT32
00367 OPCODE_is_scf (OPCODE op)
00368 {
00369 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00370 return (OPERATOR_is_scf (OPCODE_operator (op)));
00371 }
00372
00373
00374 inline mUINT32
00375 OPCODE_is_stmt (OPCODE op)
00376 {
00377 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00378 return (OPERATOR_is_stmt (OPCODE_operator (op)));
00379 }
00380
00381
00382 inline mUINT32
00383 OPCODE_is_expression (OPCODE op)
00384 {
00385 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00386 return (OPERATOR_is_expression (OPCODE_operator (op)));
00387 }
00388
00389
00390 inline mUINT32
00391 OPCODE_is_leaf (OPCODE op)
00392 {
00393 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00394 return (OPERATOR_is_leaf (OPCODE_operator (op)));
00395 }
00396
00397
00398 inline mUINT32
00399 OPCODE_is_store (OPCODE op)
00400 {
00401 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00402 return (OPERATOR_is_store (OPCODE_operator (op)));
00403 }
00404
00405
00406 inline mUINT32
00407 OPCODE_is_load (OPCODE op)
00408 {
00409 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00410 return (OPERATOR_is_load (OPCODE_operator (op)));
00411 }
00412
00413
00414 inline mUINT32
00415 OPCODE_is_call (OPCODE op)
00416 {
00417 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00418 return (OPERATOR_is_call (OPCODE_operator (op)));
00419 }
00420
00421
00422 inline mUINT32
00423 OPCODE_is_compare (OPCODE op)
00424 {
00425 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00426 return (OPERATOR_is_compare (OPCODE_operator (op)));
00427 }
00428
00429
00430 inline mUINT32
00431 OPCODE_is_non_scf (OPCODE op)
00432 {
00433 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00434 return (OPERATOR_is_non_scf (OPCODE_operator (op)));
00435 }
00436
00437
00438 inline mUINT32
00439 OPCODE_is_boolean (OPCODE op)
00440 {
00441 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00442 return (OPERATOR_is_boolean (OPCODE_operator (op)));
00443 }
00444
00445
00446 inline mUINT32
00447 OPCODE_is_endsbb (OPCODE op)
00448 {
00449 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00450 return (OPERATOR_is_endsbb (OPCODE_operator (op)));
00451 }
00452
00453
00454 inline mUINT32
00455 OPCODE_is_comp_unit_if (OPCODE op)
00456 {
00457 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00458 return (OPERATOR_is_comp_unit_if (OPCODE_operator (op)));
00459 }
00460
00461
00462 inline mUINT32
00463 OPCODE_is_not_executable (OPCODE op)
00464 {
00465 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00466 return (OPERATOR_is_not_executable (OPCODE_operator (op)));
00467 }
00468
00469
00470 inline mUINT32
00471 OPCODE_is_prefetch (OPCODE op)
00472 {
00473 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00474 return (OPERATOR_is_prefetch (OPCODE_operator (op)));
00475 }
00476
00477
00478 inline mUINT32
00479 OPCODE_has_next_prev (OPCODE op)
00480 {
00481 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00482 return (OPERATOR_has_next_prev (OPCODE_operator (op)));
00483 }
00484
00485
00486 inline mUINT32
00487 OPCODE_has_sym (OPCODE op)
00488 {
00489 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00490 return (OPERATOR_has_sym (OPCODE_operator (op)));
00491 }
00492
00493
00494 inline mUINT32
00495 OPCODE_has_label (OPCODE op)
00496 {
00497 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00498 return (OPERATOR_has_label (OPCODE_operator (op)));
00499 }
00500
00501
00502 inline mUINT32
00503 OPCODE_has_num_entries (OPCODE op)
00504 {
00505 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00506 return (OPERATOR_has_num_entries (OPCODE_operator (op)));
00507 }
00508
00509
00510 inline mUINT32
00511 OPCODE_has_offset (OPCODE op)
00512 {
00513 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00514 return (OPERATOR_has_offset (OPCODE_operator (op)));
00515 }
00516
00517
00518 inline mUINT32
00519 OPCODE_has_2offsets (OPCODE op)
00520 {
00521 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00522 return (OPERATOR_has_2offsets (OPCODE_operator (op)));
00523 }
00524
00525
00526 inline mUINT32
00527 OPCODE_has_bits (OPCODE op)
00528 {
00529 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00530 return (OPERATOR_has_bits (OPCODE_operator (op)));
00531 }
00532
00533
00534 inline mUINT32
00535 OPCODE_has_ndim (OPCODE op)
00536 {
00537 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00538 return (OPERATOR_has_ndim (OPCODE_operator (op)));
00539 }
00540
00541
00542 inline mUINT32
00543 OPCODE_has_esize (OPCODE op)
00544 {
00545 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00546 return (OPERATOR_has_esize (OPCODE_operator (op)));
00547 }
00548
00549
00550 inline mUINT32
00551 OPCODE_has_value (OPCODE op)
00552 {
00553 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00554 return (OPERATOR_has_value (OPCODE_operator (op)));
00555 }
00556
00557
00558 inline mUINT32
00559 OPCODE_has_flags (OPCODE op)
00560 {
00561 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00562 return (OPERATOR_has_flags (OPCODE_operator (op)));
00563 }
00564
00565
00566 inline mUINT32
00567 OPCODE_has_inumber (OPCODE op)
00568 {
00569 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00570 return (OPERATOR_has_inumber (OPCODE_operator (op)));
00571 }
00572
00573
00574 inline mUINT32
00575 OPCODE_has_1ty (OPCODE op)
00576 {
00577 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00578 return (OPERATOR_has_1ty (OPCODE_operator (op)));
00579 }
00580
00581
00582 inline mUINT32
00583 OPCODE_has_2ty (OPCODE op)
00584 {
00585 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00586 return (OPERATOR_has_2ty (OPCODE_operator (op)));
00587 }
00588
00589
00590 inline mUINT32
00591 OPCODE_has_ereg_supp (OPCODE op)
00592 {
00593 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00594 return (OPERATOR_has_ereg_supp (OPCODE_operator (op)));
00595 }
00596
00597
00598 inline mUINT32
00599 OPCODE_has_barrier (OPCODE op)
00600 {
00601 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00602 return (OPERATOR_has_barrier (OPCODE_operator (op)));
00603 }
00604
00605
00606 inline mUINT32
00607 OPCODE_has_last_label (OPCODE op)
00608 {
00609 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00610 return (OPERATOR_has_last_label (OPCODE_operator (op)));
00611 }
00612
00613
00614 inline mUINT32
00615 OPCODE_has_field_id (OPCODE op)
00616 {
00617 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00618 return (OPERATOR_has_field_id (OPCODE_operator (op)));
00619 }
00620
00621
00622 inline mINT8
00623 OPCODE_nkids(OPCODE op)
00624 {
00625 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00626 return (OPERATOR_nkids (OPCODE_operator (op)));
00627 }
00628
00629
00630 inline OPERATOR_MAPCAT
00631 OPCODE_mapcat (OPCODE op)
00632 {
00633 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00634 return (OPERATOR_mapcat (OPCODE_operator (op)));
00635 }
00636
00637
00638 inline BOOL
00639 OPCODE_is_black_box (OPCODE op)
00640 {
00641 Is_True(Is_Valid_Opcode (op), ("Bad opcode %d", op));
00642 return (OPERATOR_is_black_box (OPCODE_operator (op)));
00643 }