00001 #define sign_extend(N,SIZE) (((int)((N) << (sizeof(unsigned)*8-(SIZE)))) >> (sizeof(unsigned)*8-(SIZE)))
00002 #include <assert.h>
00003
00004 #line 2 "machine/hppa/decoder_low.m"
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 #include "global.h"
00033 #include "decoder.h"
00034 #include "hppa-names.h"
00035 #include "rtl.h"
00036
00037 void c_null(ADDRESS hostpc, char **garble);
00038 unsigned long c_wcr(ADDRESS hostpc, char **garble);
00039 bool c_c_n(ADDRESS hostpc);
00040 void addr(ADDRESS hostpc);
00041
00042
00043 void not_used(int unwanted)
00044 {
00045 unwanted = 0;
00046 }
00047
00048 DWord getDword (unsigned lc)
00049
00050
00051 {
00052 return
00053 (DWord)
00054 ((((((
00055 *(Byte *)lc << 8
00056 ) + *(Byte *)(lc+1)) << 8
00057 ) + *(Byte *)(lc+2)) << 8
00058 ) + *(Byte *)(lc+3));
00059 }
00060
00061 bool c_c_n(ADDRESS hostpc)
00062 {
00063 bool result = true;
00064
00065
00066 #line 60 "machine/hppa/decoder_low.m"
00067 {
00068 dword MATCH_p =
00069
00070 #line 60 "machine/hppa/decoder_low.m"
00071 hostpc
00072 ;
00073 unsigned MATCH_w_32_0;
00074 {
00075 MATCH_w_32_0 = getDword(MATCH_p);
00076
00077 switch((MATCH_w_32_0 >> 26 & 0x3f) ) {
00078 case 0: case 1: case 3: case 4: case 5: case 6: case 7: case 8:
00079 case 9: case 10: case 11: case 12: case 13: case 14: case 15:
00080 case 16: case 17: case 18: case 19: case 20: case 21: case 22:
00081 case 23: case 24: case 25: case 26: case 27: case 28: case 29:
00082 case 30: case 31: case 38: case 46: case 48: case 49: case 54:
00083 case 55: case 56: case 57: case 58: case 60: case 61: case 62:
00084 case 63:
00085 goto MATCH_label_e0; break;
00086 case 2:
00087
00088 switch((MATCH_w_32_0 >> 6 & 0x3f) ) {
00089 case 0: case 4: case 5: case 7: case 8: case 9: case 10:
00090 case 11: case 12: case 13: case 14: case 15: case 16: case 17:
00091 case 19: case 20: case 21: case 22: case 23: case 24: case 25:
00092 case 26: case 27: case 28: case 29: case 30: case 31: case 34:
00093 case 38: case 39: case 40: case 41: case 42: case 43: case 46:
00094 case 47: case 48: case 51: case 52: case 56: case 57: case 58:
00095 case 59: case 60:
00096 if ((MATCH_w_32_0 >> 12 & 0x1) == 1)
00097 goto MATCH_label_e2;
00098 else
00099 goto MATCH_label_e1;
00100
00101 break;
00102 case 1: case 2: case 3: case 6: case 18: case 32: case 33:
00103 case 35: case 36: case 37: case 44: case 45: case 49: case 50:
00104 case 53: case 54: case 55: case 61: case 62: case 63:
00105 goto MATCH_label_e0; break;
00106 default: assert(0);
00107 }
00108 break;
00109 case 32: case 33: case 39: case 40: case 41:
00110 goto MATCH_label_e1; break;
00111 case 34: case 35: case 42: case 43: case 47:
00112 goto MATCH_label_e2; break;
00113 case 36:
00114 if ((MATCH_w_32_0 >> 12 & 0x1) == 1)
00115 goto MATCH_label_e2;
00116 else
00117 goto MATCH_label_e1;
00118
00119 break;
00120 case 37: case 44: case 45:
00121 if ((MATCH_w_32_0 >> 12 & 0x1) == 1 &&
00122 (0 <= (MATCH_w_32_0 >> 11 & 0x1) &&
00123 (MATCH_w_32_0 >> 11 & 0x1) < 2))
00124 goto MATCH_label_e2;
00125 else
00126 goto MATCH_label_e1;
00127
00128 break;
00129 case 50: case 51:
00130 if ((MATCH_w_32_0 >> 15 & 0x1) == 1)
00131 goto MATCH_label_e2;
00132 else
00133 goto MATCH_label_e1;
00134
00135 break;
00136 case 52:
00137 if ((MATCH_w_32_0 >> 15 & 0x1) == 1)
00138 if ((MATCH_w_32_0 >> 13 & 0x7) == 0 ||
00139 2 <= (MATCH_w_32_0 >> 13 & 0x7) &&
00140 (MATCH_w_32_0 >> 13 & 0x7) < 8 ||
00141 (MATCH_w_32_0 >> 13 & 0x7) == 1 &&
00142 (MATCH_w_32_0 >> 12 & 0x1) == 0 &&
00143 (MATCH_w_32_0 >> 10 & 0x1) == 1)
00144 goto MATCH_label_e0;
00145 else
00146 goto MATCH_label_e2;
00147 else
00148 if ((MATCH_w_32_0 >> 12 & 0x1) == 0 &&
00149 (MATCH_w_32_0 >> 10 & 0x1) == 1)
00150 goto MATCH_label_e0;
00151 else
00152 goto MATCH_label_e1;
00153 break;
00154 case 53:
00155 if ((MATCH_w_32_0 >> 15 & 0x1) == 1)
00156 if ((MATCH_w_32_0 >> 13 & 0x7) == 0 ||
00157 2 <= (MATCH_w_32_0 >> 13 & 0x7) &&
00158 (MATCH_w_32_0 >> 13 & 0x7) < 8)
00159 goto MATCH_label_e0;
00160 else
00161 goto MATCH_label_e2;
00162 else
00163 goto MATCH_label_e1;
00164 break;
00165 case 59:
00166 if ((MATCH_w_32_0 >> 15 & 0x1) == 1)
00167 if ((MATCH_w_32_0 >> 13 & 0x7) == 1)
00168 goto MATCH_label_e2;
00169 else
00170 goto MATCH_label_e0;
00171 else
00172 goto MATCH_label_e1;
00173 break;
00174 default: assert(0);
00175 }
00176
00177 }goto MATCH_finished_e;
00178
00179 MATCH_label_e0: (void)0;
00180 assert(0);
00181 goto MATCH_finished_e;
00182
00183 MATCH_label_e1: (void)0;
00184
00185 #line 61 "machine/hppa/decoder_low.m"
00186 { result = true; }
00187
00188
00189
00190 goto MATCH_finished_e;
00191
00192 MATCH_label_e2: (void)0;
00193
00194 #line 62 "machine/hppa/decoder_low.m"
00195 { result = false; }
00196
00197
00198
00199 goto MATCH_finished_e;
00200
00201 MATCH_finished_e: (void)0;
00202
00203 }
00204
00205 #line 65 "machine/hppa/decoder_low.m"
00206 return result;
00207 }
00208
00209 SemStr* NJMCDecoder::c_c(ADDRESS hostpc, int &cond)
00210 {
00211 static const char *c_c_names[] = {
00212 "c_c_no", "c_c_eq", "c_c_l", "c_c_le", "c_c_ul", "c_c_ule", "c_c_sv",
00213 "c_c_od", "c_c_yes", "c_c_ne", "c_c_ge", "c_c_g", "c_c_uge", "c_c_ug",
00214 "c_c_nsv", "c_c_ev"
00215 };
00216 static const int cmpib_codes[] = { 4, 1, 2, 3, 12, 9, 10, 11 };
00217 static const int sep_codes[] = { 0, 1, 2, 7, 8, 9, 10, 15 };
00218
00219
00220 #line 76 "machine/hppa/decoder_low.m"
00221 {
00222 dword MATCH_p =
00223
00224 #line 76 "machine/hppa/decoder_low.m"
00225 hostpc
00226 ;
00227 unsigned MATCH_w_32_0;
00228 {
00229 MATCH_w_32_0 = getDword(MATCH_p);
00230
00231 switch((MATCH_w_32_0 >> 26 & 0x3f) ) {
00232 case 0: case 1: case 3: case 4: case 5: case 6: case 7: case 8:
00233 case 9: case 11: case 12: case 13: case 14: case 15: case 16:
00234 case 17: case 18: case 19: case 20: case 21: case 22: case 23:
00235 case 24: case 25: case 26: case 27: case 28: case 29: case 30:
00236 case 31: case 38: case 46: case 54: case 55: case 56: case 57:
00237 case 58: case 60: case 61: case 62: case 63:
00238 goto MATCH_label_d0; break;
00239 case 2:
00240
00241 switch((MATCH_w_32_0 >> 6 & 0x3f) ) {
00242 case 0: case 4: case 5: case 7: case 8: case 9: case 10:
00243 case 11: case 12: case 13: case 14: case 15: case 16: case 17:
00244 case 19: case 20: case 21: case 22: case 23: case 24: case 25:
00245 case 26: case 27: case 28: case 29: case 30: case 31: case 34:
00246 case 38: case 39: case 40: case 41: case 42: case 43: case 46:
00247 case 47: case 48: case 51: case 52: case 56: case 57: case 58:
00248 case 59: case 60:
00249 if ((MATCH_w_32_0 >> 5 & 0x1) == 1 &&
00250 (0 <= (MATCH_w_32_0 >> 12 & 0x1) &&
00251 (MATCH_w_32_0 >> 12 & 0x1) < 2)) {
00252 unsigned c3 = (MATCH_w_32_0 >> 13 & 0x7) ;
00253 unsigned cmplt = addressToPC(MATCH_p);
00254
00255 #line 81 "machine/hppa/decoder_low.m"
00256 {
00257
00258 cond = c3 + (c_c_n(cmplt)?0:8);
00259
00260 }
00261
00262
00263
00264
00265 }
00266 else
00267 goto MATCH_label_d1;
00268
00269 break;
00270 case 1: case 2: case 3: case 6: case 18: case 32: case 33:
00271 case 35: case 36: case 37: case 44: case 45: case 49: case 50:
00272 case 53: case 54: case 55: case 61: case 62: case 63:
00273 goto MATCH_label_d0; break;
00274 default: assert(0);
00275 }
00276 break;
00277 case 10:
00278
00279 #line 84 "machine/hppa/decoder_low.m"
00280 {
00281
00282 cond = 0;
00283
00284 }
00285
00286
00287
00288
00289 break;
00290 case 32: case 33: case 34: case 35:
00291 {
00292 unsigned c3 = (MATCH_w_32_0 >> 13 & 0x7) ;
00293 unsigned cmplt = addressToPC(MATCH_p);
00294
00295 #line 90 "machine/hppa/decoder_low.m"
00296 {
00297
00298 cond = c3 + (c_c_n(cmplt)?0:8);
00299
00300 }
00301
00302
00303
00304
00305 }
00306
00307 break;
00308 case 36:
00309 goto MATCH_label_d1; break;
00310 case 37: case 44: case 45:
00311 goto MATCH_label_d1; break;
00312 case 39: case 47:
00313 {
00314 unsigned c3 = (MATCH_w_32_0 >> 13 & 0x7) ;
00315 unsigned cmplt = addressToPC(MATCH_p);
00316
00317 #line 93 "machine/hppa/decoder_low.m"
00318 {
00319
00320 cond = c3 + (c_c_n(cmplt)?0:8);
00321
00322 }
00323
00324
00325
00326
00327 }
00328
00329 break;
00330 case 40: case 41: case 42: case 43:
00331 goto MATCH_label_d1; break;
00332 case 48: case 49:
00333 if ((MATCH_w_32_0 >> 13 & 0x1) == 1) {
00334 unsigned c = (MATCH_w_32_0 >> 15 & 0x1) ;
00335
00336 #line 102 "machine/hppa/decoder_low.m"
00337 {
00338
00339 cond = 1 + (c?0:8);
00340
00341 }
00342
00343
00344
00345
00346 }
00347 else {
00348 unsigned c = (MATCH_w_32_0 >> 15 & 0x1) ;
00349
00350 #line 99 "machine/hppa/decoder_low.m"
00351 {
00352
00353 cond = 1 + (c?0:8);
00354
00355 }
00356
00357
00358
00359
00360 }
00361
00362 break;
00363 case 50: case 51:
00364 goto MATCH_label_d2; break;
00365 case 52:
00366 if ((MATCH_w_32_0 >> 12 & 0x1) == 0 &&
00367 (MATCH_w_32_0 >> 10 & 0x1) == 1)
00368 goto MATCH_label_d0;
00369 else
00370 goto MATCH_label_d2;
00371
00372 break;
00373 case 53:
00374 goto MATCH_label_d2; break;
00375 case 59:
00376 {
00377 unsigned c3 =
00378 ((MATCH_w_32_0 >> 15 & 0x1) << 2) +
00379 (MATCH_w_32_0 >> 13 & 0x3) ;
00380
00381 #line 96 "machine/hppa/decoder_low.m"
00382 {
00383
00384 cond = cmpib_codes[c3];
00385
00386 }
00387
00388
00389
00390
00391 }
00392
00393 break;
00394 default: assert(0);
00395 }
00396
00397 }goto MATCH_finished_d;
00398
00399 MATCH_label_d0: (void)0;
00400
00401 #line 105 "machine/hppa/decoder_low.m"
00402 {
00403
00404 cond = 0;
00405
00406 }
00407
00408
00409
00410 goto MATCH_finished_d;
00411
00412 MATCH_label_d1: (void)0;
00413 {
00414 unsigned c3 = (MATCH_w_32_0 >> 13 & 0x7) ;
00415 unsigned cmplt = addressToPC(MATCH_p);
00416
00417 #line 78 "machine/hppa/decoder_low.m"
00418 {
00419
00420 cond = c3 + (c_c_n(cmplt)?0:8);
00421
00422 }
00423
00424
00425
00426
00427 }
00428 goto MATCH_finished_d;
00429
00430 MATCH_label_d2: (void)0;
00431 {
00432 unsigned c3_16 =
00433 ((MATCH_w_32_0 >> 15 & 0x1) << 2) +
00434 (MATCH_w_32_0 >> 13 & 0x3) ;
00435
00436 #line 87 "machine/hppa/decoder_low.m"
00437 {
00438
00439 cond = sep_codes[c3_16];
00440
00441 }
00442
00443
00444
00445
00446 }
00447 goto MATCH_finished_d;
00448
00449 MATCH_finished_d: (void)0;
00450
00451 }
00452
00453 #line 109 "machine/hppa/decoder_low.m"
00454 return instantiateNamedParam(c_c_names[cond]);
00455 }
00456
00457 unsigned long c_wcr(ADDRESS hostpc, char **garble)
00458 {
00459 #if 0
00460 unsigned long regl;
00461
00462
00463 #line 115 "machine/hppa/decoder_low.m"
00464 {
00465 dword MATCH_p =
00466
00467 #line 115 "machine/hppa/decoder_low.m"
00468 hostpc
00469 ;
00470 unsigned MATCH_w_32_0;
00471 {
00472 MATCH_w_32_0 = getDword(MATCH_p);
00473 if ((MATCH_w_32_0 >> 5 & 0xff) == 69)
00474 if ((MATCH_w_32_0 >> 26 & 0x3f) == 0)
00475 if ((MATCH_w_32_0 >> 14 & 0x1) == 1)
00476
00477 #line 120 "machine/hppa/decoder_low.m"
00478 {
00479
00480 *garble += sprintf(*garble,".w");
00481
00482 regl = 11;
00483
00484 }
00485
00486
00487
00488 else {
00489 unsigned r_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
00490
00491 #line 117 "machine/hppa/decoder_low.m"
00492 {
00493
00494 regl = r_06;
00495
00496 }
00497
00498
00499
00500
00501 }
00502 else
00503 goto MATCH_label_c0;
00504 else
00505 goto MATCH_label_c0;
00506
00507 }goto MATCH_finished_c;
00508
00509 MATCH_label_c0: (void)0;
00510
00511 #line 124 "machine/hppa/decoder_low.m"
00512 {
00513
00514 regl = 0;
00515
00516
00517
00518 }
00519
00520
00521
00522 goto MATCH_finished_c;
00523
00524 MATCH_finished_c: (void)0;
00525
00526 }
00527
00528 #line 129 "machine/hppa/decoder_low.m"
00529 return regl;
00530 #else
00531 return 0;
00532 #endif
00533 }
00534
00535 void c_null(ADDRESS hostpc, char **garble)
00536 {
00537 #if 0
00538
00539
00540 #line 137 "machine/hppa/decoder_low.m"
00541 {
00542 dword MATCH_p =
00543
00544 #line 137 "machine/hppa/decoder_low.m"
00545 hostpc
00546 ;
00547 unsigned MATCH_w_32_0;
00548 {
00549 MATCH_w_32_0 = getDword(MATCH_p);
00550
00551 switch((MATCH_w_32_0 >> 26 & 0x3f) ) {
00552 case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
00553 case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15:
00554 case 16: case 17: case 18: case 19: case 20: case 21: case 22:
00555 case 23: case 24: case 25: case 26: case 27: case 28: case 29:
00556 case 30: case 31: case 36: case 37: case 38: case 44: case 45:
00557 case 46: case 52: case 53: case 54: case 55: case 60: case 61:
00558 case 62: case 63:
00559
00560 #line 144 "machine/hppa/decoder_low.m"
00561 {
00562
00563
00564
00565 }
00566
00567
00568
00569
00570 break;
00571 case 32: case 33: case 34: case 35: case 39: case 40: case 41:
00572 case 42: case 43: case 47: case 48: case 49: case 50: case 51:
00573 case 56: case 57: case 58: case 59:
00574 if ((MATCH_w_32_0 >> 1 & 0x1) == 1)
00575
00576 #line 141 "machine/hppa/decoder_low.m"
00577 {
00578
00579 *garble += sprintf(*garble, ".n");
00580
00581 }
00582
00583
00584
00585 else
00586
00587 #line 138 "machine/hppa/decoder_low.m"
00588 {
00589
00590 }
00591
00592
00593
00594
00595 break;
00596 default: assert(0);
00597 }
00598
00599 }goto MATCH_finished_b;
00600
00601 MATCH_finished_b: (void)0;
00602
00603 }
00604
00605 #line 148 "machine/hppa/decoder_low.m"
00606 #endif
00607 }
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622 list<RT*>* NJMCDecoder::decodeLowLevelInstruction (ADDRESS hostPC, ADDRESS pc,
00623 DecodeResult& result)
00624 {
00625 ADDRESS nextPC;
00626
00627 list<RT*>* RTs = NULL;
00628 int condvalue;
00629
00630
00631 #line 170 "machine/hppa/decoder_low.m"
00632 {
00633 dword MATCH_p =
00634
00635 #line 170 "machine/hppa/decoder_low.m"
00636 hostPC
00637 ;
00638 char *MATCH_name;
00639 static char *MATCH_name_ext8_19_0[] = {
00640 "BREAK", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00641 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00642 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00643 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00644 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00645 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00646 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00647 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00648 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00649 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00650 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00651 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00652 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00653 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00654 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00655 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "RFI",
00656 (char *)0, (char *)0, (char *)0, (char *)0, "RFI.r", (char *)0,
00657 (char *)0, (char *)0, (char *)0, (char *)0, "SSM", (char *)0, (char *)0,
00658 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "RSM", (char *)0,
00659 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00660 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00661 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00662 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00663 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00664 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00665 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00666 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, "MFIA",
00667 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00668 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00669 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00670 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00671 (char *)0, (char *)0, (char *)0, (char *)0, "MTCTL", "MTSM", (char *)0,
00672 (char *)0, "MTSARCM",
00673 };
00674 static char *MATCH_name_ext5_11_1[] = {
00675 "SYNC", (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00676 (char *)0, (char *)0, (char *)0, "SYNCDMA",
00677 };
00678 static char *MATCH_name_ext_17_2[] = {"MFCTL", "MFCTL.w", };
00679 static char *MATCH_name_ext4_22_55[] = {
00680 "LDBS", "LDHS", "LDWS", "LDDS", "LDDAS", "LDCDS", "LDWAS", "LDCWS",
00681 "STBS", "STHS", "STWS", "STDS", "STBYS", "STDBYS", "STWAS", "STWDS",
00682 };
00683 static char *MATCH_name_op_58[] = {
00684 (char *)0, (char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
00685 (char *)0, (char *)0, "LDIL", (char *)0, "ADDIL", (char *)0, (char *)0,
00686 "LDO", (char *)0, (char *)0, "LDB", "LDH", "LDW", "LDWM", (char *)0,
00687 (char *)0, (char *)0, (char *)0, "STB", "STH", "STW", "STWM",
00688 };
00689 static char *MATCH_name_sub_16_71[] = {
00690 "FID", "FTEST", "FCPY", "FABS", "FSQRT", "FRND", "FNEG", "FNEGABS",
00691 };
00692 static char *MATCH_name_sub_14_72[] = {
00693 "FCNVFF", "FCNVXF", "FCNVFX", "FCNVFXT",
00694 };
00695 static char *MATCH_name_sub_16_73[] = {"FCMP", "FSUB", "FMPY", "FDIV", };
00696 static char *MATCH_name_sub_16_74[] = {"FADD", "FTEST.E", };
00697 static char *MATCH_name_sub_14_75[] = {
00698 "FCNVFF.E", "FCNVXF.E", "FCNVFX.E", "FCNVFXT.E",
00699 };
00700 static char *MATCH_name_p_20_88[] = {"VSHD", "SHD", };
00701 static char *MATCH_name_se_21_89[] = {"VEXTRU", "VEXTRS", };
00702 static char *MATCH_name_se_21_90[] = {"EXTRU", "EXTRS", };
00703 static char *MATCH_name_se_21_91[] = {"ZVDEP", "VDEP", };
00704 static char *MATCH_name_se_21_92[] = {"ZDEP", "DEP", };
00705 static char *MATCH_name_se_21_93[] = {"ZVDEPI", "VDEPI", };
00706 static char *MATCH_name_se_21_94[] = {"ZDEPI", "DEPI", };
00707 unsigned MATCH_w_32_0;
00708 {
00709 MATCH_w_32_0 = getDword(MATCH_p);
00710
00711 switch((MATCH_w_32_0 >> 26 & 0x3f) ) {
00712 case 0:
00713 if (33 <= (MATCH_w_32_0 >> 5 & 0xff) &&
00714 (MATCH_w_32_0 >> 5 & 0xff) < 69 ||
00715 116 <= (MATCH_w_32_0 >> 5 & 0xff) &&
00716 (MATCH_w_32_0 >> 5 & 0xff) < 165 ||
00717 199 <= (MATCH_w_32_0 >> 5 & 0xff) &&
00718 (MATCH_w_32_0 >> 5 & 0xff) < 256)
00719 goto MATCH_label_a0;
00720 else
00721 switch((MATCH_w_32_0 >> 5 & 0xff) ) {
00722 case 0:
00723 MATCH_name = MATCH_name_ext8_19_0[(MATCH_w_32_0 >> 5 & 0xff)
00724 ];
00725 {
00726 char *name = MATCH_name;
00727 unsigned im13_06 =
00728 (MATCH_w_32_0 >> 13 & 0x1fff) ;
00729 unsigned im5_27 = (MATCH_w_32_0 & 0x1f) ;
00730 nextPC = 4 + MATCH_p;
00731
00732 #line 281 "machine/hppa/decoder_low.m"
00733 {
00734
00735 RTs = instantiate(pc, name, dis_Num(im5_27), dis_Num(im13_06));
00736
00737 }
00738
00739
00740
00741
00742 }
00743
00744 break;
00745 case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
00746 case 9: case 10: case 11: case 12: case 13: case 14: case 15:
00747 case 16: case 17: case 18: case 19: case 20: case 21: case 22:
00748 case 23: case 24: case 25: case 26: case 27: case 28: case 29:
00749 case 30: case 31: case 70: case 71: case 72: case 73: case 74:
00750 case 75: case 76: case 77: case 78: case 79: case 80: case 81:
00751 case 82: case 83: case 84: case 85: case 86: case 87: case 88:
00752 case 89: case 90: case 91: case 92: case 93: case 94: case 95:
00753 case 97: case 98: case 99: case 100: case 102: case 103:
00754 case 104: case 105: case 106: case 108: case 109: case 110:
00755 case 111: case 112: case 113: case 114: case 166: case 167:
00756 case 168: case 169: case 170: case 171: case 172: case 173:
00757 case 174: case 175: case 176: case 177: case 178: case 179:
00758 case 180: case 181: case 182: case 183: case 184: case 185:
00759 case 186: case 187: case 188: case 189: case 190: case 191:
00760 case 192: case 193: case 196: case 197:
00761 goto MATCH_label_a0; break;
00762 case 32:
00763 if ((MATCH_w_32_0 >> 16 & 0x1f) == 0 ||
00764 (MATCH_w_32_0 >> 16 & 0x1f) == 10) {
00765 MATCH_name =
00766 MATCH_name_ext5_11_1[(MATCH_w_32_0 >> 16 & 0x1f)
00767 ];
00768 goto MATCH_label_a1;
00769
00770 }
00771 else
00772 goto MATCH_label_a0;
00773
00774 break;
00775 case 69:
00776 MATCH_name = MATCH_name_ext_17_2[(MATCH_w_32_0 >> 14 & 0x1)
00777 ];
00778 {
00779 char *name = MATCH_name;
00780 unsigned cmplt = addressToPC(MATCH_p);
00781 unsigned t_27 = (MATCH_w_32_0 & 0x1f) ;
00782 nextPC = 4 + MATCH_p;
00783
00784 #line 293 "machine/hppa/decoder_low.m"
00785 {
00786
00787 RTs = instantiate(pc, name, dis_c_wcr(cmplt), dis_Reg(t_27));
00788
00789 }
00790
00791
00792
00793
00794 }
00795
00796 break;
00797 case 96: case 101:
00798 MATCH_name = MATCH_name_ext8_19_0[(MATCH_w_32_0 >> 5 & 0xff)
00799 ];
00800 goto MATCH_label_a1;
00801
00802 break;
00803 case 107: case 115:
00804 MATCH_name = MATCH_name_ext8_19_0[(MATCH_w_32_0 >> 5 & 0xff)
00805 ];
00806 {
00807 char *name = MATCH_name;
00808 unsigned im10_06 =
00809 (MATCH_w_32_0 >> 16 & 0x3ff) ;
00810 unsigned t_27 = (MATCH_w_32_0 & 0x1f) ;
00811 nextPC = 4 + MATCH_p;
00812
00813 #line 284 "machine/hppa/decoder_low.m"
00814 {
00815
00816 RTs = instantiate(pc, name, dis_Num(im10_06), dis_Reg(t_27));
00817
00818 }
00819
00820
00821
00822
00823 }
00824
00825 break;
00826 case 165:
00827 MATCH_name = MATCH_name_ext8_19_0[(MATCH_w_32_0 >> 5 & 0xff)
00828 ];
00829 {
00830 char *name = MATCH_name;
00831 unsigned t_27 = (MATCH_w_32_0 & 0x1f) ;
00832 nextPC = 4 + MATCH_p;
00833
00834 #line 299 "machine/hppa/decoder_low.m"
00835 {
00836
00837 RTs = instantiate(pc, name, dis_Reg(t_27));
00838
00839 }
00840
00841
00842
00843
00844
00845
00846
00847
00848 }
00849
00850 break;
00851 case 194:
00852 MATCH_name = MATCH_name_ext8_19_0[(MATCH_w_32_0 >> 5 & 0xff)
00853 ];
00854 {
00855 char *name = MATCH_name;
00856 unsigned ct_06 =
00857 (MATCH_w_32_0 >> 21 & 0x1f) ;
00858 unsigned r_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
00859 nextPC = 4 + MATCH_p;
00860
00861 #line 296 "machine/hppa/decoder_low.m"
00862 {
00863
00864 RTs = instantiate(pc, name, dis_Reg(r_11), dis_ct(ct_06));
00865
00866 }
00867
00868
00869
00870
00871 }
00872
00873 break;
00874 case 195: case 198:
00875 MATCH_name = MATCH_name_ext8_19_0[(MATCH_w_32_0 >> 5 & 0xff)
00876 ];
00877 {
00878 char *name = MATCH_name;
00879 unsigned r_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
00880 nextPC = 4 + MATCH_p;
00881
00882 #line 290 "machine/hppa/decoder_low.m"
00883 {
00884
00885 RTs = instantiate(pc, name, dis_Reg(r_11));
00886
00887 }
00888
00889
00890
00891
00892 }
00893
00894 break;
00895 default: assert(0);
00896 }
00897 break;
00898 case 1: case 4: case 5: case 6: case 7: case 15: case 20: case 21:
00899 case 22: case 23: case 28: case 29: case 30: case 31: case 32:
00900 case 33: case 34: case 35: case 38: case 39: case 40: case 41:
00901 case 42: case 43: case 46: case 47: case 48: case 49: case 50:
00902 case 51: case 54: case 55: case 56: case 57: case 59: case 60:
00903 case 61: case 62: case 63:
00904 goto MATCH_label_a0; break;
00905 case 2:
00906
00907 switch((MATCH_w_32_0 >> 6 & 0x3f) ) {
00908 case 0:
00909 MATCH_name = "ANDCM"; goto MATCH_label_a2; break;
00910 case 1: case 2: case 3: case 6: case 18: case 32: case 33:
00911 case 35: case 36: case 37: case 44: case 45: case 49: case 50:
00912 case 53: case 54: case 55: case 61: case 62: case 63:
00913 goto MATCH_label_a0; break;
00914 case 4:
00915 MATCH_name = "HSUB.u"; goto MATCH_label_a2; break;
00916 case 5:
00917 MATCH_name = "HSUB.s"; goto MATCH_label_a2; break;
00918 case 7:
00919 MATCH_name = "HSUB"; goto MATCH_label_a2; break;
00920 case 8:
00921 MATCH_name = "AND"; goto MATCH_label_a2; break;
00922 case 9:
00923 MATCH_name = "OR"; goto MATCH_label_a2; break;
00924 case 10:
00925 MATCH_name = "XOR"; goto MATCH_label_a2; break;
00926 case 11:
00927 MATCH_name = "HAVG"; goto MATCH_label_a2; break;
00928 case 12:
00929 MATCH_name = "HADD.u"; goto MATCH_label_a2; break;
00930 case 13:
00931 MATCH_name = "HADD.s"; goto MATCH_label_a2; break;
00932 case 14:
00933 MATCH_name = "UXOR"; goto MATCH_label_a2; break;
00934 case 15:
00935 MATCH_name = "HADD"; goto MATCH_label_a2; break;
00936 case 16:
00937 MATCH_name = "SUB"; goto MATCH_label_a2; break;
00938 case 17:
00939 MATCH_name = "DS"; goto MATCH_label_a2; break;
00940 case 19:
00941 MATCH_name = "SUB.t"; goto MATCH_label_a2; break;
00942 case 20:
00943 MATCH_name = "SUB.b"; goto MATCH_label_a2; break;
00944 case 21:
00945 MATCH_name = "HSHR1ADD"; goto MATCH_label_a2; break;
00946 case 22:
00947 MATCH_name = "HSHR2ADD"; goto MATCH_label_a2; break;
00948 case 23:
00949 MATCH_name = "HSHR3ADD"; goto MATCH_label_a2; break;
00950 case 24:
00951 MATCH_name = "ADD"; goto MATCH_label_a2; break;
00952 case 25:
00953 MATCH_name = "SHL1ADD"; goto MATCH_label_a2; break;
00954 case 26:
00955 MATCH_name = "SHL2ADD"; goto MATCH_label_a2; break;
00956 case 27:
00957 MATCH_name = "SHL3ADD"; goto MATCH_label_a2; break;
00958 case 28:
00959 MATCH_name = "ADD.c"; goto MATCH_label_a2; break;
00960 case 29:
00961 MATCH_name = "HSHL1ADD"; goto MATCH_label_a2; break;
00962 case 30:
00963 MATCH_name = "HSHL2ADD"; goto MATCH_label_a2; break;
00964 case 31:
00965 MATCH_name = "HSHL3ADD"; goto MATCH_label_a2; break;
00966 case 34:
00967 MATCH_name = "CMPCLR"; goto MATCH_label_a2; break;
00968 case 38:
00969 MATCH_name = "UADDCM"; goto MATCH_label_a2; break;
00970 case 39:
00971 MATCH_name = "UADDCMT"; goto MATCH_label_a2; break;
00972 case 40:
00973 MATCH_name = "ADD.l"; goto MATCH_label_a2; break;
00974 case 41:
00975 MATCH_name = "SHL1ADD.l"; goto MATCH_label_a2; break;
00976 case 42:
00977 MATCH_name = "SHL2ADD.l"; goto MATCH_label_a2; break;
00978 case 43:
00979 MATCH_name = "SHL3ADD.l"; goto MATCH_label_a2; break;
00980 case 46:
00981 MATCH_name = "DCOR"; goto MATCH_label_a2; break;
00982 case 47:
00983 MATCH_name = "IDCOR"; goto MATCH_label_a2; break;
00984 case 48:
00985 MATCH_name = "SUB.v"; goto MATCH_label_a2; break;
00986 case 51:
00987 MATCH_name = "SUB.t.v"; goto MATCH_label_a2; break;
00988 case 52:
00989 MATCH_name = "SUB.b.v"; goto MATCH_label_a2; break;
00990 case 56:
00991 MATCH_name = "ADD.v"; goto MATCH_label_a2; break;
00992 case 57:
00993 MATCH_name = "SHL1ADD.v"; goto MATCH_label_a2; break;
00994 case 58:
00995 MATCH_name = "SHL2ADD.v"; goto MATCH_label_a2; break;
00996 case 59:
00997 MATCH_name = "SHL3ADD.v"; goto MATCH_label_a2; break;
00998 case 60:
00999 MATCH_name = "ADD.c.v"; goto MATCH_label_a2; break;
01000 default: assert(0);
01001 }
01002 break;
01003 case 3:
01004 if ((MATCH_w_32_0 >> 12 & 0x1) == 1)
01005 if ((MATCH_w_32_0 >> 5 & 0x1) == 1)
01006 if (0 <= (MATCH_w_32_0 >> 13 & 0x1) &&
01007 (MATCH_w_32_0 >> 13 & 0x1) < 2 &&
01008 (8 <= (MATCH_w_32_0 >> 6 & 0xf) &&
01009 (MATCH_w_32_0 >> 6 & 0xf) < 16)) {
01010 MATCH_name = MATCH_name_ext4_22_55[(MATCH_w_32_0 >> 6 & 0xf)
01011 ];
01012 goto MATCH_label_a4;
01013
01014 }
01015 else {
01016 MATCH_name = MATCH_name_ext4_22_55[(MATCH_w_32_0 >> 6 & 0xf)
01017 ];
01018 goto MATCH_label_a3;
01019
01020 }
01021 else
01022
01023 switch((MATCH_w_32_0 >> 6 & 0xf) ) {
01024 case 0: case 1: case 2: case 3: case 4: case 5: case 6:
01025 case 7:
01026 MATCH_name =
01027 MATCH_name_ext4_22_55[(MATCH_w_32_0 >> 6 & 0xf)
01028 ];
01029 goto MATCH_label_a3;
01030
01031 break;
01032 case 8: case 9: case 10: case 11: case 14: case 15:
01033 MATCH_name =
01034 MATCH_name_ext4_22_55[(MATCH_w_32_0 >> 6 & 0xf)
01035 ];
01036 goto MATCH_label_a4;
01037
01038 break;
01039 case 12:
01040 MATCH_name = "STBYS"; goto MATCH_label_a4; break;
01041 case 13:
01042 MATCH_name = "STDBYS"; goto MATCH_label_a4; break;
01043 default: assert(0);
01044 }
01045 else
01046
01047 switch((MATCH_w_32_0 >> 6 & 0xf) ) {
01048 case 0:
01049 MATCH_name = "LDBX"; goto MATCH_label_a3; break;
01050 case 1:
01051 MATCH_name = "LDHX"; goto MATCH_label_a3; break;
01052 case 2:
01053 MATCH_name = "LDWX"; goto MATCH_label_a3; break;
01054 case 3:
01055 MATCH_name = "LDDX"; goto MATCH_label_a3; break;
01056 case 4:
01057 MATCH_name = "LDDAX"; goto MATCH_label_a3; break;
01058 case 5:
01059 MATCH_name = "LDCDX"; goto MATCH_label_a3; break;
01060 case 6:
01061 MATCH_name = "LDWAX"; goto MATCH_label_a3; break;
01062 case 7:
01063 MATCH_name = "LDCWX"; goto MATCH_label_a3; break;
01064 case 8: case 9: case 10: case 11: case 12: case 13: case 14:
01065 case 15:
01066 goto MATCH_label_a0; break;
01067 default: assert(0);
01068 }
01069 break;
01070 case 8:
01071 MATCH_name =
01072 MATCH_name_op_58[(MATCH_w_32_0 >> 26 & 0x3f) ];
01073 {
01074 char *name = MATCH_name;
01075 unsigned imm21 =
01076 ((MATCH_w_32_0 >> 12 & 0x3) << 11) +
01077 ((MATCH_w_32_0 >> 16 & 0x1f) << 13) +
01078 ((MATCH_w_32_0 >> 14 & 0x3) << 18) +
01079 ((MATCH_w_32_0 >> 1 & 0x7ff) << 20) +
01080 (((MATCH_w_32_0 & 0x1) & 0x1) << 31);
01081 unsigned t_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
01082 nextPC = 4 + MATCH_p;
01083
01084 #line 185 "machine/hppa/decoder_low.m"
01085 {
01086
01087 RTs = instantiate(pc, name, dis_Num(imm21), dis_Reg(t_06));
01088
01089 }
01090
01091
01092
01093
01094 }
01095
01096 break;
01097 case 9:
01098 if ((MATCH_w_32_0 >> 7 & 0x3) == 0)
01099 if ((MATCH_w_32_0 >> 9 & 0x1) == 1)
01100 if ((MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01101 (MATCH_w_32_0 >> 5 & 0x1) == 0 ||
01102 (MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01103 (MATCH_w_32_0 >> 5 & 0x1) == 1 &&
01104 (0 <= (MATCH_w_32_0 >> 13 & 0x1) &&
01105 (MATCH_w_32_0 >> 13 & 0x1) < 2)) {
01106 MATCH_name = "FSTWS";
01107 goto MATCH_label_a6;
01108
01109 }
01110 else {
01111 MATCH_name = "FSTWX";
01112 goto MATCH_label_a6;
01113
01114 }
01115 else
01116 if ((MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01117 (MATCH_w_32_0 >> 5 & 0x1) == 0 ||
01118 (MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01119 (MATCH_w_32_0 >> 5 & 0x1) == 1 &&
01120 (0 <= (MATCH_w_32_0 >> 13 & 0x1) &&
01121 (MATCH_w_32_0 >> 13 & 0x1) < 2)) {
01122 MATCH_name = "FLDWS";
01123 goto MATCH_label_a5;
01124
01125 }
01126 else {
01127 MATCH_name = "FLDWX";
01128 goto MATCH_label_a5;
01129
01130 }
01131 else
01132 goto MATCH_label_a0;
01133 break;
01134 case 10:
01135 MATCH_name =
01136 MATCH_name_op_58[(MATCH_w_32_0 >> 26 & 0x3f) ];
01137 {
01138 char *name = MATCH_name;
01139 unsigned imm21 =
01140 ((MATCH_w_32_0 >> 12 & 0x3) << 11) +
01141 ((MATCH_w_32_0 >> 16 & 0x1f) << 13) +
01142 ((MATCH_w_32_0 >> 14 & 0x3) << 18) +
01143 ((MATCH_w_32_0 >> 1 & 0x7ff) << 20) +
01144 (((MATCH_w_32_0 & 0x1) & 0x1) << 31);
01145 unsigned r_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
01146 nextPC = 4 + MATCH_p;
01147
01148 #line 182 "machine/hppa/decoder_low.m"
01149 {
01150
01151 RTs = instantiate(pc, name, dis_Num(imm21), dis_Reg(r_06));
01152
01153 }
01154
01155
01156
01157
01158 }
01159
01160 break;
01161 case 11:
01162 if ((MATCH_w_32_0 >> 7 & 0x3) == 0)
01163 if ((MATCH_w_32_0 >> 9 & 0x1) == 1)
01164 if ((MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01165 (MATCH_w_32_0 >> 5 & 0x1) == 0 ||
01166 (MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01167 (MATCH_w_32_0 >> 5 & 0x1) == 1 &&
01168 (0 <= (MATCH_w_32_0 >> 13 & 0x1) &&
01169 (MATCH_w_32_0 >> 13 & 0x1) < 2)) {
01170 MATCH_name = "FSTDS";
01171 goto MATCH_label_a8;
01172
01173 }
01174 else {
01175 MATCH_name = "FSTDX";
01176 goto MATCH_label_a8;
01177
01178 }
01179 else
01180 if ((MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01181 (MATCH_w_32_0 >> 5 & 0x1) == 0 ||
01182 (MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01183 (MATCH_w_32_0 >> 5 & 0x1) == 1 &&
01184 (0 <= (MATCH_w_32_0 >> 13 & 0x1) &&
01185 (MATCH_w_32_0 >> 13 & 0x1) < 2)) {
01186 MATCH_name = "FLDDS";
01187 goto MATCH_label_a7;
01188
01189 }
01190 else {
01191 MATCH_name = "FLDDX";
01192 goto MATCH_label_a7;
01193
01194 }
01195 else
01196 goto MATCH_label_a0;
01197 break;
01198 case 12:
01199
01200 switch((MATCH_w_32_0 >> 9 & 0x3) ) {
01201 case 0:
01202 if ((MATCH_w_32_0 >> 13 & 0x7) == 1)
01203 goto MATCH_label_a0;
01204 else {
01205 MATCH_name =
01206 MATCH_name_sub_16_71[(MATCH_w_32_0 >> 13 & 0x7)
01207 ];
01208 {
01209 char *name = MATCH_name;
01210 unsigned fmt =
01211 (MATCH_w_32_0 >> 11 & 0x3) ;
01212 unsigned rf = (MATCH_w_32_0 >> 21 & 0x1f) ;
01213 unsigned tf = (MATCH_w_32_0 & 0x1f) ;
01214 nextPC = 4 + MATCH_p;
01215
01216 #line 304 "machine/hppa/decoder_low.m"
01217 {
01218
01219 RTs = instantiate(pc, name, dis_Num(fmt), dis_Freg(rf, fmt),
01220
01221 dis_Freg(tf, fmt));
01222
01223 }
01224
01225
01226
01227
01228 }
01229
01230 }
01231
01232 break;
01233 case 1:
01234 if (0 <= (MATCH_w_32_0 >> 15 & 0x7) &&
01235 (MATCH_w_32_0 >> 15 & 0x7) < 4) {
01236 MATCH_name =
01237 MATCH_name_sub_14_72[(MATCH_w_32_0 >> 15 & 0x7)
01238 ];
01239 {
01240 char *name = MATCH_name;
01241 unsigned df = (MATCH_w_32_0 >> 13 & 0x3) ;
01242 unsigned rf = (MATCH_w_32_0 >> 21 & 0x1f) ;
01243 unsigned sf = (MATCH_w_32_0 >> 11 & 0x3) ;
01244 unsigned tf = (MATCH_w_32_0 & 0x1f) ;
01245 nextPC = 4 + MATCH_p;
01246
01247 #line 308 "machine/hppa/decoder_low.m"
01248 {
01249
01250 RTs = instantiate(pc, name, dis_Num(sf), dis_Num(df),
01251
01252 dis_Freg(rf, sf), dis_Freg(tf, df));
01253
01254 }
01255
01256
01257
01258
01259 }
01260
01261 }
01262 else
01263 goto MATCH_label_a0;
01264
01265 break;
01266 case 2:
01267
01268 switch((MATCH_w_32_0 >> 13 & 0x7) ) {
01269 case 0:
01270 MATCH_name =
01271 MATCH_name_sub_16_73[(MATCH_w_32_0 >> 13 & 0x7)
01272 ];
01273 goto MATCH_label_a9;
01274
01275 break;
01276 case 1:
01277 MATCH_name =
01278 MATCH_name_sub_16_71[(MATCH_w_32_0 >> 13 & 0x7)
01279 ];
01280 goto MATCH_label_a9;
01281
01282 break;
01283 case 2: case 3: case 4: case 5: case 6: case 7:
01284 goto MATCH_label_a0; break;
01285 default: assert(0);
01286 }
01287 break;
01288 case 3:
01289
01290 switch((MATCH_w_32_0 >> 13 & 0x7) ) {
01291 case 0:
01292 MATCH_name =
01293 MATCH_name_sub_16_74[(MATCH_w_32_0 >> 13 & 0x7)
01294 ];
01295 goto MATCH_label_a10;
01296
01297 break;
01298 case 1: case 2: case 3:
01299 MATCH_name =
01300 MATCH_name_sub_16_73[(MATCH_w_32_0 >> 13 & 0x7)
01301 ];
01302 goto MATCH_label_a10;
01303
01304 break;
01305 case 4: case 5: case 6: case 7:
01306 goto MATCH_label_a0; break;
01307 default: assert(0);
01308 }
01309 break;
01310 default: assert(0);
01311 }
01312 break;
01313 case 13:
01314 MATCH_name =
01315 MATCH_name_op_58[(MATCH_w_32_0 >> 26 & 0x3f) ];
01316 {
01317 char *name = MATCH_name;
01318 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
01319 unsigned ldisp =
01320 (sign_extend((MATCH_w_32_0 & 0x1) , 1) << 13) +
01321 (MATCH_w_32_0 >> 1 & 0x1fff) ;
01322 unsigned t = (MATCH_w_32_0 >> 16 & 0x1f) ;
01323 nextPC = 4 + MATCH_p;
01324
01325 #line 221 "machine/hppa/decoder_low.m"
01326 {
01327
01328 RTs = instantiate(pc, name, dis_Num(ldisp), dis_Reg(b), dis_Reg(t));
01329
01330 }
01331
01332
01333
01334
01335 }
01336
01337 break;
01338 case 14:
01339
01340 switch((MATCH_w_32_0 >> 9 & 0x3) ) {
01341 case 0:
01342 goto MATCH_label_a0; break;
01343 case 1:
01344 if (0 <= (MATCH_w_32_0 >> 15 & 0x7) &&
01345 (MATCH_w_32_0 >> 15 & 0x7) < 4) {
01346 MATCH_name =
01347 MATCH_name_sub_14_75[(MATCH_w_32_0 >> 15 & 0x7)
01348 ];
01349 {
01350 char *name = MATCH_name;
01351 unsigned df = (MATCH_w_32_0 >> 13 & 0x3) ;
01352 unsigned rf =
01353 ((MATCH_w_32_0 >> 7 & 0x1) << 5) +
01354 (MATCH_w_32_0 >> 21 & 0x1f) ;
01355 unsigned sf = (MATCH_w_32_0 >> 11 & 0x3) ;
01356 unsigned tf =
01357 ((MATCH_w_32_0 >> 6 & 0x1) << 5) +
01358 (MATCH_w_32_0 & 0x1f) ;
01359 nextPC = 4 + MATCH_p;
01360
01361 #line 308 "machine/hppa/decoder_low.m"
01362 {
01363
01364 RTs = instantiate(pc, name, dis_Num(sf), dis_Num(df),
01365
01366 dis_Freg(rf, sf), dis_Freg(tf, df));
01367
01368 }
01369
01370
01371
01372
01373 }
01374
01375 }
01376 else
01377 goto MATCH_label_a0;
01378
01379 break;
01380 case 2:
01381
01382 switch((MATCH_w_32_0 >> 13 & 0x7) ) {
01383 case 0:
01384 MATCH_name = "FCMP.E"; goto MATCH_label_a11; break;
01385 case 1:
01386 MATCH_name =
01387 MATCH_name_sub_16_74[(MATCH_w_32_0 >> 13 & 0x7)
01388 ];
01389 goto MATCH_label_a11;
01390
01391 break;
01392 case 2: case 3: case 4: case 5: case 6: case 7:
01393 goto MATCH_label_a0; break;
01394 default: assert(0);
01395 }
01396 break;
01397 case 3:
01398
01399 switch((MATCH_w_32_0 >> 13 & 0x7) ) {
01400 case 0:
01401 if ((MATCH_w_32_0 >> 8 & 0x1) == 0) {
01402 MATCH_name = "FADD.E";
01403 goto MATCH_label_a12;
01404
01405 }
01406 else
01407 goto MATCH_label_a0;
01408
01409 break;
01410 case 1:
01411 if ((MATCH_w_32_0 >> 8 & 0x1) == 0) {
01412 MATCH_name = "FSUB.E";
01413 goto MATCH_label_a12;
01414
01415 }
01416 else
01417 goto MATCH_label_a0;
01418
01419 break;
01420 case 2:
01421 if ((MATCH_w_32_0 >> 8 & 0x1) == 1) {
01422 unsigned fr1 =
01423 ((MATCH_w_32_0 >> 7 & 0x1) << 5) +
01424 (MATCH_w_32_0 >> 21 & 0x1f) ;
01425 unsigned fr2 =
01426 ((MATCH_w_32_0 >> 12 & 0x1) << 5) +
01427 (MATCH_w_32_0 >> 16 & 0x1f) ;
01428 unsigned frt =
01429 ((MATCH_w_32_0 >> 6 & 0x1) << 5) +
01430 (MATCH_w_32_0 & 0x1f) ;
01431 nextPC = 4 + MATCH_p;
01432
01433 #line 320 "machine/hppa/decoder_low.m"
01434 {
01435
01436
01437
01438 RTs = instantiate(pc, "XMPYU", dis_Freg(fr1, 0), dis_Freg(fr2, 0),
01439
01440 dis_Freg(frt, 1));
01441
01442 }
01443
01444
01445
01446
01447
01448
01449
01450
01451
01452
01453
01454
01455
01456
01457
01458
01459 }
01460 else {
01461 MATCH_name = "FMPY.E";
01462 goto MATCH_label_a12;
01463
01464 }
01465
01466 break;
01467 case 3:
01468 if ((MATCH_w_32_0 >> 8 & 0x1) == 0) {
01469 MATCH_name = "FDIV.E";
01470 goto MATCH_label_a12;
01471
01472 }
01473 else
01474 goto MATCH_label_a0;
01475
01476 break;
01477 case 4: case 5: case 6: case 7:
01478 goto MATCH_label_a0; break;
01479 default: assert(0);
01480 }
01481 break;
01482 default: assert(0);
01483 }
01484 break;
01485 case 16: case 17: case 18: case 19:
01486 MATCH_name =
01487 MATCH_name_op_58[(MATCH_w_32_0 >> 26 & 0x3f) ];
01488 {
01489 char *name = MATCH_name;
01490 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
01491 unsigned c_addr = addressToPC(MATCH_p);
01492 unsigned r_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
01493 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
01494 unsigned xd = addressToPC(MATCH_p);
01495 nextPC = 4 + MATCH_p;
01496
01497 #line 213 "machine/hppa/decoder_low.m"
01498 {
01499
01500 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_xd(xd),
01501
01502 dis_Sreg(s), dis_Reg(b), dis_Reg(r_11));
01503
01504 }
01505
01506
01507
01508
01509 }
01510
01511 break;
01512 case 24: case 25: case 26: case 27:
01513 MATCH_name =
01514 MATCH_name_op_58[(MATCH_w_32_0 >> 26 & 0x3f) ];
01515 {
01516 char *name = MATCH_name;
01517 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
01518 unsigned c_addr = addressToPC(MATCH_p);
01519 unsigned r_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
01520 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
01521 unsigned xd = addressToPC(MATCH_p);
01522 nextPC = 4 + MATCH_p;
01523
01524 #line 217 "machine/hppa/decoder_low.m"
01525 {
01526
01527 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_Reg(r_11),
01528
01529 dis_xd(xd), dis_Sreg(s), dis_Reg(b));
01530
01531 }
01532
01533
01534
01535
01536 }
01537
01538 break;
01539 case 36:
01540 MATCH_name = "CMPICLR"; goto MATCH_label_a13; break;
01541 case 37:
01542 if ((MATCH_w_32_0 >> 11 & 0x1) == 1 &&
01543 (0 <= (MATCH_w_32_0 >> 12 & 0x1) &&
01544 (MATCH_w_32_0 >> 12 & 0x1) < 2)) {
01545 MATCH_name = "SUBI.v";
01546 goto MATCH_label_a13;
01547
01548 }
01549 else { MATCH_name = "SUBI"; goto MATCH_label_a13; }
01550
01551 break;
01552 case 44:
01553 if ((MATCH_w_32_0 >> 11 & 0x1) == 1 &&
01554 (0 <= (MATCH_w_32_0 >> 12 & 0x1) &&
01555 (MATCH_w_32_0 >> 12 & 0x1) < 2)) {
01556 MATCH_name = "ADDI.t.v";
01557 goto MATCH_label_a13;
01558
01559 }
01560 else { MATCH_name = "ADDI.t"; goto MATCH_label_a13; }
01561
01562 break;
01563 case 45:
01564 if ((MATCH_w_32_0 >> 11 & 0x1) == 1 &&
01565 (0 <= (MATCH_w_32_0 >> 12 & 0x1) &&
01566 (MATCH_w_32_0 >> 12 & 0x1) < 2)) {
01567 MATCH_name = "ADDI.v";
01568 goto MATCH_label_a13;
01569
01570 }
01571 else { MATCH_name = "ADDI"; goto MATCH_label_a13; }
01572
01573 break;
01574 case 52:
01575 if ((MATCH_w_32_0 >> 12 & 0x1) == 1)
01576 if ((MATCH_w_32_0 >> 11 & 0x1) == 1 &&
01577 (0 <= (MATCH_w_32_0 >> 10 & 0x1) &&
01578 (MATCH_w_32_0 >> 10 & 0x1) < 2)) {
01579 MATCH_name = MATCH_name_se_21_90[(MATCH_w_32_0 >> 10 & 0x1)
01580 ];
01581 {
01582 char *name = MATCH_name;
01583 unsigned c = addressToPC(MATCH_p);
01584 unsigned len = 32 - (MATCH_w_32_0 & 0x1f) ;
01585 unsigned p = (MATCH_w_32_0 >> 5 & 0x1f) ;
01586 unsigned r = (MATCH_w_32_0 >> 21 & 0x1f) ;
01587 unsigned t = (MATCH_w_32_0 >> 16 & 0x1f) ;
01588 nextPC = 4 + MATCH_p;
01589
01590 #line 236 "machine/hppa/decoder_low.m"
01591 {
01592
01593 RTs = instantiate(pc, name, dis_Reg(r), dis_Num(p), dis_Num(len),
01594
01595 dis_Reg(t), c_c(c, condvalue));
01596
01597 }
01598
01599
01600
01601
01602 }
01603
01604 }
01605 else {
01606 MATCH_name = MATCH_name_se_21_89[(MATCH_w_32_0 >> 10 & 0x1)
01607 ];
01608 {
01609 char *name = MATCH_name;
01610 unsigned c = addressToPC(MATCH_p);
01611 unsigned len = 32 - (MATCH_w_32_0 & 0x1f) ;
01612 unsigned r = (MATCH_w_32_0 >> 21 & 0x1f) ;
01613 unsigned t = (MATCH_w_32_0 >> 16 & 0x1f) ;
01614 nextPC = 4 + MATCH_p;
01615
01616 #line 232 "machine/hppa/decoder_low.m"
01617 {
01618
01619 RTs = instantiate(pc, name, dis_Reg(r), dis_Num(len), dis_Reg(t),
01620
01621 c_c(c, condvalue));
01622
01623 }
01624
01625
01626
01627
01628 }
01629
01630 }
01631 else
01632 if ((MATCH_w_32_0 >> 10 & 0x1) == 1)
01633 goto MATCH_label_a0;
01634 else
01635 if ((MATCH_w_32_0 >> 11 & 0x1) == 1) {
01636 MATCH_name = MATCH_name_p_20_88[(MATCH_w_32_0 >> 11 & 0x1)
01637 ];
01638 {
01639 char *name = MATCH_name;
01640 unsigned c = addressToPC(MATCH_p);
01641 unsigned p =
01642 31 - (MATCH_w_32_0 >> 5 & 0x1f) ;
01643 unsigned r1 = (MATCH_w_32_0 >> 16 & 0x1f) ;
01644 unsigned r2 = (MATCH_w_32_0 >> 21 & 0x1f) ;
01645 unsigned t = (MATCH_w_32_0 & 0x1f) ;
01646 nextPC = 4 + MATCH_p;
01647
01648 #line 228 "machine/hppa/decoder_low.m"
01649 {
01650
01651 RTs = instantiate(pc, name, dis_Reg(r1), dis_Reg(r2), dis_Num(p),
01652
01653 dis_Reg(t), c_c(c, condvalue));
01654
01655 }
01656
01657
01658
01659
01660 }
01661
01662 }
01663 else {
01664 MATCH_name = MATCH_name_p_20_88[(MATCH_w_32_0 >> 11 & 0x1)
01665 ];
01666 {
01667 char *name = MATCH_name;
01668 unsigned c = addressToPC(MATCH_p);
01669 unsigned r1 = (MATCH_w_32_0 >> 16 & 0x1f) ;
01670 unsigned r2 = (MATCH_w_32_0 >> 21 & 0x1f) ;
01671 unsigned t = (MATCH_w_32_0 & 0x1f) ;
01672 nextPC = 4 + MATCH_p;
01673
01674 #line 224 "machine/hppa/decoder_low.m"
01675 {
01676
01677 RTs = instantiate(pc, name, dis_Reg(r1), dis_Reg(r2), dis_Reg(t),
01678
01679 c_c(c, condvalue));
01680
01681 }
01682
01683
01684
01685
01686 }
01687
01688 }
01689 break;
01690 case 53:
01691 if ((MATCH_w_32_0 >> 12 & 0x1) == 1)
01692 if ((MATCH_w_32_0 >> 11 & 0x1) == 1 &&
01693 (0 <= (MATCH_w_32_0 >> 10 & 0x1) &&
01694 (MATCH_w_32_0 >> 10 & 0x1) < 2)) {
01695 MATCH_name = MATCH_name_se_21_94[(MATCH_w_32_0 >> 10 & 0x1)
01696 ];
01697 {
01698 char *name = MATCH_name;
01699 unsigned c = addressToPC(MATCH_p);
01700 unsigned i =
01701 ((sign_extend((MATCH_w_32_0 >> 16 & 0x1) ,
01702 1) & 0xfffffff) << 4) +
01703 (MATCH_w_32_0 >> 17 & 0xf) ;
01704 unsigned len = 32 - (MATCH_w_32_0 & 0x1f) ;
01705 unsigned p =
01706 31 - (MATCH_w_32_0 >> 5 & 0x1f) ;
01707 unsigned t = (MATCH_w_32_0 >> 21 & 0x1f) ;
01708 nextPC = 4 + MATCH_p;
01709
01710 #line 252 "machine/hppa/decoder_low.m"
01711 {
01712
01713 RTs = instantiate(pc, name, dis_Num(i), dis_Num(p), dis_Num(len),
01714
01715 dis_Reg(t), c_c(c, condvalue));
01716
01717 }
01718
01719
01720
01721
01722 }
01723
01724 }
01725 else {
01726 MATCH_name = MATCH_name_se_21_93[(MATCH_w_32_0 >> 10 & 0x1)
01727 ];
01728 {
01729 char *name = MATCH_name;
01730 unsigned c = addressToPC(MATCH_p);
01731 unsigned i =
01732 ((sign_extend((MATCH_w_32_0 >> 16 & 0x1) ,
01733 1) & 0xfffffff) << 4) +
01734 (MATCH_w_32_0 >> 17 & 0xf) ;
01735 unsigned len = 32 - (MATCH_w_32_0 & 0x1f) ;
01736 unsigned t = (MATCH_w_32_0 >> 21 & 0x1f) ;
01737 nextPC = 4 + MATCH_p;
01738
01739 #line 248 "machine/hppa/decoder_low.m"
01740 {
01741
01742 RTs = instantiate(pc, name, dis_Num(i), dis_Num(len), dis_Reg(t),
01743
01744 c_c(c, condvalue));
01745
01746 }
01747
01748
01749
01750
01751 }
01752
01753 }
01754 else
01755 if ((MATCH_w_32_0 >> 11 & 0x1) == 1 &&
01756 (0 <= (MATCH_w_32_0 >> 10 & 0x1) &&
01757 (MATCH_w_32_0 >> 10 & 0x1) < 2)) {
01758 MATCH_name = MATCH_name_se_21_92[(MATCH_w_32_0 >> 10 & 0x1)
01759 ];
01760 {
01761 char *name = MATCH_name;
01762 unsigned c = addressToPC(MATCH_p);
01763 unsigned len = 32 - (MATCH_w_32_0 & 0x1f) ;
01764 unsigned p =
01765 31 - (MATCH_w_32_0 >> 5 & 0x1f) ;
01766 unsigned r = (MATCH_w_32_0 >> 16 & 0x1f) ;
01767 unsigned t = (MATCH_w_32_0 >> 21 & 0x1f) ;
01768 nextPC = 4 + MATCH_p;
01769
01770 #line 244 "machine/hppa/decoder_low.m"
01771 {
01772
01773 RTs = instantiate(pc, name, dis_Reg(r), dis_Num(p), dis_Num(len),
01774
01775 dis_Reg(t), c_c(c, condvalue));
01776
01777 }
01778
01779
01780
01781
01782 }
01783
01784 }
01785 else {
01786 MATCH_name = MATCH_name_se_21_91[(MATCH_w_32_0 >> 10 & 0x1)
01787 ];
01788 {
01789 char *name = MATCH_name;
01790 unsigned c = addressToPC(MATCH_p);
01791 unsigned len = 32 - (MATCH_w_32_0 & 0x1f) ;
01792 unsigned r = (MATCH_w_32_0 >> 16 & 0x1f) ;
01793 unsigned t = (MATCH_w_32_0 >> 21 & 0x1f) ;
01794 nextPC = 4 + MATCH_p;
01795
01796 #line 240 "machine/hppa/decoder_low.m"
01797 {
01798
01799 RTs = instantiate(pc, name, dis_Reg(r), dis_Num(len), dis_Reg(t),
01800
01801 c_c(c, condvalue));
01802
01803 }
01804
01805
01806
01807
01808 }
01809
01810 }
01811 break;
01812 case 58:
01813
01814 switch((MATCH_w_32_0 >> 13 & 0x7) ) {
01815 case 0:
01816 MATCH_name = "BL"; goto MATCH_label_a14; break;
01817 case 1:
01818 MATCH_name = "GATE"; goto MATCH_label_a14; break;
01819 case 2:
01820 if ((MATCH_w_32_0 >> 12 & 0x1) == 1)
01821 goto MATCH_label_a0;
01822 else {
01823 MATCH_name = "BLR";
01824 {
01825 char *name = MATCH_name;
01826 unsigned nulli = addressToPC(MATCH_p);
01827 unsigned t_06 =
01828 (MATCH_w_32_0 >> 21 & 0x1f) ;
01829 unsigned x_11 =
01830 (MATCH_w_32_0 >> 16 & 0x1f) ;
01831 nextPC = 4 + MATCH_p;
01832
01833 #line 266 "machine/hppa/decoder_low.m"
01834 {
01835
01836
01837
01838 RTs = instantiate(pc, name, dis_Reg(x_11), dis_Reg(t_06));
01839
01840 not_used(nulli);
01841
01842 }
01843
01844
01845
01846
01847 }
01848
01849 }
01850
01851 break;
01852 case 3:
01853 goto MATCH_label_a0; break;
01854 case 4:
01855 MATCH_name = "BL.PUSH"; goto MATCH_label_a14; break;
01856 case 5:
01857 MATCH_name = "BL.LONG";
01858 {
01859 char *name = MATCH_name;
01860 unsigned nulli = addressToPC(MATCH_p);
01861 unsigned ubr_target =
01862 8 +
01863 ((MATCH_w_32_0 >> 3 & 0x3ff) << 2) +
01864 ((MATCH_w_32_0 >> 2 & 0x1) << 12) +
01865 ((MATCH_w_32_0 >> 16 & 0x1f) << 13) +
01866 ((MATCH_w_32_0 >> 21 & 0x1f) << 18) +
01867 (sign_extend((MATCH_w_32_0 & 0x1) ,
01868 1) << 23);
01869 nextPC = 4 + MATCH_p;
01870
01871 #line 261 "machine/hppa/decoder_low.m"
01872 {
01873
01874
01875
01876 RTs = instantiate(pc, name, dis_Num(ubr_target));
01877
01878 not_used(nulli);
01879
01880 }
01881
01882
01883
01884
01885 }
01886
01887 break;
01888 case 6:
01889 if ((MATCH_w_32_0 >> 12 & 0x1) == 1 &&
01890 (0 <= (MATCH_w_32_0 >> 1 & 0x1) &&
01891 (MATCH_w_32_0 >> 1 & 0x1) < 2)) {
01892 MATCH_name = "BVE";
01893 goto MATCH_label_a15;
01894
01895 }
01896 else {
01897 MATCH_name = "BV";
01898 {
01899 char *name = MATCH_name;
01900 unsigned b_06 =
01901 (MATCH_w_32_0 >> 21 & 0x1f) ;
01902 unsigned nulli = addressToPC(MATCH_p);
01903 unsigned x_11 =
01904 (MATCH_w_32_0 >> 16 & 0x1f) ;
01905 nextPC = 4 + MATCH_p;
01906
01907 #line 271 "machine/hppa/decoder_low.m"
01908 {
01909
01910
01911
01912 RTs = instantiate(pc, name, dis_Reg(x_11), dis_Reg(b_06));
01913
01914 not_used(nulli);
01915
01916 }
01917
01918
01919
01920
01921 }
01922
01923 }
01924
01925 break;
01926 case 7:
01927 if ((MATCH_w_32_0 >> 12 & 0x1) == 0)
01928 goto MATCH_label_a0;
01929 else {
01930 MATCH_name = "BVE.l";
01931 goto MATCH_label_a15;
01932
01933 }
01934
01935 break;
01936 default: assert(0);
01937 }
01938 break;
01939 default: assert(0);
01940 }
01941
01942 }goto MATCH_finished_a;
01943
01944 MATCH_label_a0: (void)0;
01945 {
01946 nextPC = MATCH_p;
01947
01948 #line 331 "machine/hppa/decoder_low.m"
01949 {
01950
01951
01952
01953 result.valid = false;
01954
01955 cout << "Undecoded instruction " << hex << *(int*)hostPC << " at " << pc << " (opcode " << ((*(unsigned*)hostPC) >> 26) << ")\n";
01956
01957 }
01958
01959
01960
01961
01962 }
01963 goto MATCH_finished_a;
01964
01965 MATCH_label_a1: (void)0;
01966 {
01967 char *name = MATCH_name;
01968 nextPC = 4 + MATCH_p;
01969
01970 #line 287 "machine/hppa/decoder_low.m"
01971 {
01972
01973 RTs = instantiate(pc, name);
01974
01975 }
01976
01977
01978
01979
01980 }
01981 goto MATCH_finished_a;
01982
01983 MATCH_label_a2: (void)0;
01984 {
01985 char *name = MATCH_name;
01986 unsigned cmplt = addressToPC(MATCH_p);
01987 unsigned r_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
01988 unsigned r_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
01989 unsigned t_27 = (MATCH_w_32_0 & 0x1f) ;
01990 nextPC = 4 + MATCH_p;
01991
01992 #line 172 "machine/hppa/decoder_low.m"
01993 {
01994
01995
01996
01997 RTs = instantiate(pc, name, dis_Reg(r_11), dis_Reg(r_06),
01998
01999 dis_Reg(t_27),c_c(cmplt, condvalue));
02000
02001 }
02002
02003
02004
02005
02006 }
02007 goto MATCH_finished_a;
02008
02009 MATCH_label_a3: (void)0;
02010 {
02011 char *name = MATCH_name;
02012 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
02013 unsigned c_addr = addressToPC(MATCH_p);
02014 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
02015 unsigned t_27 = (MATCH_w_32_0 & 0x1f) ;
02016 unsigned xd = addressToPC(MATCH_p);
02017 nextPC = 4 + MATCH_p;
02018
02019 #line 188 "machine/hppa/decoder_low.m"
02020 {
02021
02022 RTs = instantiate(pc, name, dis_c_addr(c_addr),
02023
02024 dis_xd(xd), dis_Sreg(s),
02025
02026 dis_Reg(b), dis_Reg(t_27));
02027
02028 }
02029
02030
02031
02032
02033 }
02034 goto MATCH_finished_a;
02035
02036 MATCH_label_a4: (void)0;
02037 {
02038 char *name = MATCH_name;
02039 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
02040 unsigned c_addr = addressToPC(MATCH_p);
02041 unsigned r_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
02042 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
02043 unsigned xd = addressToPC(MATCH_p);
02044 nextPC = 4 + MATCH_p;
02045
02046 #line 193 "machine/hppa/decoder_low.m"
02047 {
02048
02049 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_Reg(r_11),
02050
02051 dis_xd(xd), dis_Sreg(s), dis_Reg(b));
02052
02053 }
02054
02055
02056
02057
02058 }
02059 goto MATCH_finished_a;
02060
02061 MATCH_label_a5: (void)0;
02062 {
02063 char *name = MATCH_name;
02064 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
02065 unsigned c_addr = addressToPC(MATCH_p);
02066 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
02067 unsigned t_27 =
02068 ((MATCH_w_32_0 >> 6 & 0x1) << 5) +
02069 (MATCH_w_32_0 & 0x1f) ;
02070 unsigned xd = addressToPC(MATCH_p);
02071 nextPC = 4 + MATCH_p;
02072
02073 #line 197 "machine/hppa/decoder_low.m"
02074 {
02075
02076 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_xd(xd),
02077
02078 dis_Sreg(s), dis_Reg(b), dis_Freg(t_27, 0));
02079
02080 }
02081
02082
02083
02084
02085 }
02086 goto MATCH_finished_a;
02087
02088 MATCH_label_a6: (void)0;
02089 {
02090 char *name = MATCH_name;
02091 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
02092 unsigned c_addr = addressToPC(MATCH_p);
02093 unsigned r_27 =
02094 ((MATCH_w_32_0 >> 6 & 0x1) << 5) +
02095 (MATCH_w_32_0 & 0x1f) ;
02096 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
02097 unsigned xd = addressToPC(MATCH_p);
02098 nextPC = 4 + MATCH_p;
02099
02100 #line 201 "machine/hppa/decoder_low.m"
02101 {
02102
02103 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_Freg(r_27, 0),
02104
02105 dis_xd(xd), dis_Sreg(s), dis_Reg(b));
02106
02107 }
02108
02109
02110
02111
02112 }
02113 goto MATCH_finished_a;
02114
02115 MATCH_label_a7: (void)0;
02116 {
02117 char *name = MATCH_name;
02118 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
02119 unsigned c_addr = addressToPC(MATCH_p);
02120 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
02121 unsigned t_27 = (MATCH_w_32_0 & 0x1f) ;
02122 unsigned xd = addressToPC(MATCH_p);
02123 nextPC = 4 + MATCH_p;
02124
02125 #line 205 "machine/hppa/decoder_low.m"
02126 {
02127
02128 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_xd(xd),
02129
02130 dis_Sreg(s), dis_Reg(b), dis_Freg(t_27, 1));
02131
02132 }
02133
02134
02135
02136
02137 }
02138 goto MATCH_finished_a;
02139
02140 MATCH_label_a8: (void)0;
02141 {
02142 char *name = MATCH_name;
02143 unsigned b = (MATCH_w_32_0 >> 21 & 0x1f) ;
02144 unsigned c_addr = addressToPC(MATCH_p);
02145 unsigned r_27 = (MATCH_w_32_0 & 0x1f) ;
02146 unsigned s = (MATCH_w_32_0 >> 14 & 0x3) ;
02147 unsigned xd = addressToPC(MATCH_p);
02148 nextPC = 4 + MATCH_p;
02149
02150 #line 209 "machine/hppa/decoder_low.m"
02151 {
02152
02153 RTs = instantiate(pc, name, dis_c_addr(c_addr), dis_Freg(r_27, 1),
02154
02155 dis_xd(xd), dis_Sreg(s), dis_Reg(b));
02156
02157 }
02158
02159
02160
02161
02162 }
02163 goto MATCH_finished_a;
02164
02165 MATCH_label_a9: (void)0;
02166 {
02167 char *name = MATCH_name;
02168 unsigned df = (MATCH_w_32_0 & 0x1f) ;
02169 unsigned rf = (MATCH_w_32_0 >> 21 & 0x1f) ;
02170 unsigned sf = (MATCH_w_32_0 >> 11 & 0x3) ;
02171 unsigned tf = (MATCH_w_32_0 >> 16 & 0x1f) ;
02172 nextPC = 4 + MATCH_p;
02173
02174 #line 312 "machine/hppa/decoder_low.m"
02175 {
02176
02177 RTs = instantiate(pc, name, dis_Num(sf), dis_Num(df),
02178
02179 dis_Freg(rf, sf), dis_Freg(tf, df));
02180
02181 }
02182
02183
02184
02185
02186 }
02187 goto MATCH_finished_a;
02188
02189 MATCH_label_a10: (void)0;
02190 {
02191 char *name = MATCH_name;
02192 unsigned fmt = (MATCH_w_32_0 >> 11 & 0x3) ;
02193 unsigned fr1 = (MATCH_w_32_0 >> 21 & 0x1f) ;
02194 unsigned fr2 = (MATCH_w_32_0 >> 16 & 0x1f) ;
02195 unsigned frt = (MATCH_w_32_0 & 0x1f) ;
02196 nextPC = 4 + MATCH_p;
02197
02198 #line 316 "machine/hppa/decoder_low.m"
02199 {
02200
02201 RTs = instantiate(pc, name, dis_Num(fmt), dis_Freg(fr1, fmt),
02202
02203 dis_Freg(fr2, fmt), dis_Freg(frt, fmt));
02204
02205 }
02206
02207
02208
02209
02210 }
02211 goto MATCH_finished_a;
02212
02213 MATCH_label_a11: (void)0;
02214 {
02215 char *name = MATCH_name;
02216 unsigned df = (MATCH_w_32_0 & 0x1f) ;
02217 unsigned rf =
02218 ((MATCH_w_32_0 >> 7 & 0x1) << 5) +
02219 (MATCH_w_32_0 >> 21 & 0x1f) ;
02220 unsigned sf = (MATCH_w_32_0 >> 11 & 0x1) ;
02221 unsigned tf =
02222 ((MATCH_w_32_0 >> 12 & 0x1) << 5) +
02223 (MATCH_w_32_0 >> 16 & 0x1f) ;
02224 nextPC = 4 + MATCH_p;
02225
02226 #line 312 "machine/hppa/decoder_low.m"
02227 {
02228
02229 RTs = instantiate(pc, name, dis_Num(sf), dis_Num(df),
02230
02231 dis_Freg(rf, sf), dis_Freg(tf, df));
02232
02233 }
02234
02235
02236
02237
02238 }
02239 goto MATCH_finished_a;
02240
02241 MATCH_label_a12: (void)0;
02242 {
02243 char *name = MATCH_name;
02244 unsigned fmt = (MATCH_w_32_0 >> 11 & 0x1) ;
02245 unsigned fr1 =
02246 ((MATCH_w_32_0 >> 7 & 0x1) << 5) +
02247 (MATCH_w_32_0 >> 21 & 0x1f) ;
02248 unsigned fr2 =
02249 ((MATCH_w_32_0 >> 12 & 0x1) << 5) +
02250 (MATCH_w_32_0 >> 16 & 0x1f) ;
02251 unsigned frt =
02252 ((MATCH_w_32_0 >> 6 & 0x1) << 5) +
02253 (MATCH_w_32_0 & 0x1f) ;
02254 nextPC = 4 + MATCH_p;
02255
02256 #line 316 "machine/hppa/decoder_low.m"
02257 {
02258
02259 RTs = instantiate(pc, name, dis_Num(fmt), dis_Freg(fr1, fmt),
02260
02261 dis_Freg(fr2, fmt), dis_Freg(frt, fmt));
02262
02263 }
02264
02265
02266
02267
02268 }
02269 goto MATCH_finished_a;
02270
02271 MATCH_label_a13: (void)0;
02272 {
02273 char *name = MATCH_name;
02274 unsigned cmplt = addressToPC(MATCH_p);
02275 unsigned imm11 =
02276 (sign_extend((MATCH_w_32_0 & 0x1) , 1) << 10) +
02277 (MATCH_w_32_0 >> 1 & 0x3ff) ;
02278 unsigned r_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
02279 unsigned t_11 = (MATCH_w_32_0 >> 16 & 0x1f) ;
02280 nextPC = 4 + MATCH_p;
02281
02282 #line 177 "machine/hppa/decoder_low.m"
02283 {
02284
02285
02286
02287 RTs = instantiate(pc, name, dis_Num(imm11), dis_Reg(r_06),
02288
02289 dis_Reg(t_11), c_c(cmplt, condvalue));
02290
02291 }
02292
02293
02294
02295
02296 }
02297 goto MATCH_finished_a;
02298
02299 MATCH_label_a14: (void)0;
02300 {
02301 char *name = MATCH_name;
02302 unsigned nulli = addressToPC(MATCH_p);
02303 unsigned t_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
02304 unsigned ubr_target =
02305 8 + ((MATCH_w_32_0 >> 3 & 0x3ff) << 2) +
02306 ((MATCH_w_32_0 >> 2 & 0x1) << 12) +
02307 ((MATCH_w_32_0 >> 16 & 0x1f) << 13) +
02308 (sign_extend((MATCH_w_32_0 & 0x1) , 1) << 18);
02309 nextPC = 4 + MATCH_p;
02310
02311 #line 256 "machine/hppa/decoder_low.m"
02312 {
02313
02314
02315
02316 RTs = instantiate(pc, name, dis_Num(ubr_target), dis_Reg(t_06));
02317
02318 not_used(nulli);
02319
02320 }
02321
02322
02323
02324
02325 }
02326 goto MATCH_finished_a;
02327
02328 MATCH_label_a15: (void)0;
02329 {
02330 char *name = MATCH_name;
02331 unsigned b_06 = (MATCH_w_32_0 >> 21 & 0x1f) ;
02332 unsigned nulli = addressToPC(MATCH_p);
02333 unsigned p_31 = (MATCH_w_32_0 & 0x1) ;
02334 nextPC = 4 + MATCH_p;
02335
02336 #line 276 "machine/hppa/decoder_low.m"
02337 {
02338
02339
02340
02341 RTs = instantiate(pc, name, p_31, dis_Reg(b_06));
02342
02343 not_used(nulli);
02344
02345 }
02346
02347
02348
02349
02350 }
02351 goto MATCH_finished_a;
02352
02353 MATCH_finished_a: (void)0;
02354
02355 }
02356
02357 #line 337 "machine/hppa/decoder_low.m"
02358
02359 result.numBytes = (nextPC - hostPC);
02360 return RTs;
02361
02362 }
02363
02364
02365
02366
02367
02368
02369
02370
02371
02372
02373