Lines Matching +full:ls +full:- +full:bits
1 /* Disassembler for the PA-RISC. Somewhat derived from sparc-pinsn.c.
6 University of Utah (pa-gdb-bugs@cs.utah.edu).
22 #include "disas/dis-asm.h"
24 /* HP PA-RISC SOM object file format: definitions internal to BFD.
29 University of Utah (pa-gdb-bugs@cs.utah.edu).
55 /* HP PA-RISC relocation types */
159 relocation bits. These bits describe exactly where the caller has
167 The high order 10 bits contain parameter relocation information,
168 the low order 22 bits contain the constant offset. */
173 ((((bfd_signed_vma)(a)) << (BFD_ARCH_SIZE-22)) >> (BFD_ARCH_SIZE-22))
205 int signbit = (1 << (len - 1)); in sign_extend()
206 int mask = (signbit << 1) - 1; in sign_extend()
207 return ((x & mask) ^ signbit) - signbit; in sign_extend()
213 return (x >> 1) - ((x & 1) << (len - 1)); in low_sign_extend()
218 insertion into an opcode. pa-risc uses all sorts of weird bitfields
226 len_ones = (1 << len) - 1; in sign_unext()
237 sign = (x >> (len-1)) & 1; in low_sign_unext()
239 temp = sign_unext (x, len-1); in low_sign_unext()
247 return (( (as3 & 4) << (13-2)) in re_assemble_3()
255 | ((as12 & 0x400) >> (10 - 2)) in re_assemble_12()
271 /* Unusual 16-bit encoding, for wide mode only. */ in re_assemble_16()
281 | ((as17 & 0x0f800) << (16 - 11)) in re_assemble_17()
282 | ((as17 & 0x00400) >> (10 - 2)) in re_assemble_17()
300 | ((as22 & 0x1f0000) << (21 - 16)) in re_assemble_22()
301 | ((as22 & 0x00f800) << (16 - 11)) in re_assemble_22()
302 | ((as22 & 0x000400) >> (10 - 2)) in re_assemble_22()
308 The L and R (and LS, RS etc.) selectors are used in pairs to form a
334 bits are to be used for the displacement on the instruction. in hppa_field_adjust()
335 This fixup is used to identify three-instruction sequences to in hppa_field_adjust()
342 /* L: Select top 21 bits. */ in hppa_field_adjust()
347 /* R: Select bottom 11 bits. */ in hppa_field_adjust()
352 /* LS: Round to nearest multiple of 2048 then select top 21 bits. */ in hppa_field_adjust()
358 /* RS: Select bottom 11 bits for LS. in hppa_field_adjust()
359 We need to return a value such that 2048 * LS'x + RS'x == x. in hppa_field_adjust()
360 ie. RS'x = x - ((x + 0x400) & -0x800) in hppa_field_adjust()
362 value = ((value & 0x7ff) ^ 0x400) - 0x400; in hppa_field_adjust()
366 /* LD: Round to next multiple of 2048 then select top 21 bits. in hppa_field_adjust()
368 next one. RD in this case will be -2048. */ in hppa_field_adjust()
374 /* RD: Set bits 0-20 to one. */ in hppa_field_adjust()
375 value = value | -0x800; in hppa_field_adjust()
381 value = sym_val + ((addend + 0x1000) & -0x2000); in hppa_field_adjust()
388 ie. RR'x = s+a - (s + (((a + 0x1000) & -0x2000) & -0x800)) in hppa_field_adjust()
389 . = s+a - ((s & -0x800) + ((a + 0x1000) & -0x2000)) in hppa_field_adjust()
390 . = (s & 0x7ff) + a - ((a + 0x1000) & -0x2000) */ in hppa_field_adjust()
391 value = (sym_val & 0x7ff) + (((addend & 0x1fff) ^ 0x1000) - 0x1000); in hppa_field_adjust()
400 /* PA-RISC OPCODES */
482 bits to change. */
497 return (insn & ~ 0x3ff1) | re_assemble_14 (value & -8); in hppa_rebuild_insn()
499 case -11: in hppa_rebuild_insn()
500 return (insn & ~ 0x3ff9) | re_assemble_14 (value & -4); in hppa_rebuild_insn()
506 case -10: in hppa_rebuild_insn()
507 return (insn & ~ 0xfff1) | re_assemble_16 (value & -8); in hppa_rebuild_insn()
509 case -16: in hppa_rebuild_insn()
510 return (insn & ~ 0xfff9) | re_assemble_16 (value & -4); in hppa_rebuild_insn()
535 /* Table of opcodes for the PA-RISC.
541 University of Utah (pa-gdb-bugs@cs.utah.edu).
578 unsigned long int match; /* Bits that must be set... */
579 unsigned long int mask; /* ... in these bits. */
590 All hppa opcodes are 32 bits.
592 The match component is a mask saying which bits must match a
609 ' " - / 34 678 :; '
615 ' !"#$%&'()*+-,./0123456789:;<=>?'
644 31-p
645 ~ 6 bit shift count at 20,22:26 encoded as 63-~.
648 T 5 bit field length at 31 (encoded as 32-T)
659 O 20 bit Special Function Unit operation split between 15 bits at 20
660 and 5 bits at 31
662 2 22 bit Special Function Unit operation split between 17 bits at 20
663 and 5 bits at 31
664 1 15 bit Special Function Unit operation split between 10 bits at 20
665 and 5 bits at 31
666 0 10 bit Special Function Unit operation split between 5 bits at 20
667 and 5 bits at 31
669 F Source Floating Point Operand Format Completer encoded 2 bits at 20
670 I Source Floating Point Operand Format Completer encoded 1 bits at 20
672 G Destination Floating Point Operand Format Completer encoded 2 bits at 18
688 Z %r1 -- implicit target of addil instruction.
702 Y %sr0,%r31 -- implicit target of be,l instruction.
753 ?f Floating point compare conditions (encoded as 5 bits at 31)
758 ?d non-negated add branch conditions
760 ?w wide mode non-negated add branch conditions
765 ?t non-negated compare and branch conditions
850 /* Pseudo-instructions. */
1329 /* completely undocumented, but used by ODE, HP-UX and Linux: */
1675 ((X) >> (31 - (TO)) & ((1 << ((TO) - (FROM) + 1)) - 1))
1680 /* Some of these have been converted to 2-d arrays because they
1682 problem, convert them back to const 1-d pointer arrays. */
1784 #define fputs_filtered(STR,F) (*info->fprintf_func) (info->stream, "%s", STR)
1789 (*info->fprintf_func) (info->stream, "%s", reg ? reg_names[reg] : "r0"); in fput_reg()
1795 (*info->fprintf_func) (info->stream, "%s", reg ? fp_reg_names[reg] : "fr0"); in fput_fp_reg()
1803 (*info->fprintf_func) (info->stream, "fpe%d", reg * 2 + 1); in fput_fp_reg_r()
1805 (*info->fprintf_func) (info->stream, "%sR", fp_reg_names[reg]); in fput_fp_reg_r()
1811 (*info->fprintf_func) (info->stream, "%s", control_reg[reg]); in fput_creg()
1817 (*info->fprintf_func) (info->stream, "dr%d", reg); in fput_dreg()
1826 (*info->fprintf_func) (info->stream, "-%x", - (int) num); in fput_const()
1828 (*info->fprintf_func) (info->stream, "%x", num); in fput_const()
1834 /* Extract a 3-bit space register number from a be, ble, mtsp or mfsp. */
1981 (*info->read_memory_func) (memaddr, buffer, sizeof (buffer), info); in print_insn_hppa()
1984 (*info->memory_error_func) (status, memaddr, info); in print_insn_hppa()
1985 return -1; in print_insn_hppa()
1991 if (info->show_opcodes) { in print_insn_hppa()
1992 info->fprintf_func(info->stream, " %02x %02x %02x %02x ", in print_insn_hppa()
2001 if ((insn & opcode->mask) == opcode->match) in print_insn_hppa()
2005 if (opcode->arch == pa20w) in print_insn_hppa()
2008 (*info->fprintf_func) (info->stream, "%s", opcode->name); in print_insn_hppa()
2010 if (!strchr ("cfCY?-+nHNZFIuv{", opcode->args[0])) in print_insn_hppa()
2011 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2012 for (s = opcode->args; *s != '\0'; ++s) in print_insn_hppa()
2158 (*info->fprintf_func) (info->stream, "sr%d", space); in print_insn_hppa()
2163 (*info->fprintf_func) (info->stream, "sr%d", in print_insn_hppa()
2172 (*info->fprintf_func) in print_insn_hppa()
2173 (info->stream, "%s", in print_insn_hppa()
2177 (*info->fprintf_func) in print_insn_hppa()
2178 (info->stream, "%s ", in print_insn_hppa()
2182 (*info->fprintf_func) in print_insn_hppa()
2183 (info->stream, "%s", in print_insn_hppa()
2187 (*info->fprintf_func) in print_insn_hppa()
2188 (info->stream, "%s ", in print_insn_hppa()
2192 (*info->fprintf_func) in print_insn_hppa()
2193 (info->stream, "%s ", in print_insn_hppa()
2197 (*info->fprintf_func) in print_insn_hppa()
2198 (info->stream, "%s", in print_insn_hppa()
2206 (*info->fprintf_func) (info->stream, ",bc "); in print_insn_hppa()
2209 (*info->fprintf_func) (info->stream, ",sl "); in print_insn_hppa()
2212 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2219 (*info->fprintf_func) (info->stream, ",co "); in print_insn_hppa()
2222 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2226 (*info->fprintf_func) (info->stream, ",o"); in print_insn_hppa()
2229 (*info->fprintf_func) (info->stream, ",gate"); in print_insn_hppa()
2232 (*info->fprintf_func) (info->stream, ",l,push"); in print_insn_hppa()
2235 (*info->fprintf_func) (info->stream, ",pop"); in print_insn_hppa()
2239 (*info->fprintf_func) (info->stream, ",l"); in print_insn_hppa()
2242 (*info->fprintf_func) in print_insn_hppa()
2243 (info->stream, "%s ", in print_insn_hppa()
2247 (*info->fprintf_func) (info->stream, ",w "); in print_insn_hppa()
2251 (*info->fprintf_func) (info->stream, ",r"); in print_insn_hppa()
2255 (*info->fprintf_func) (info->stream, ",m "); in print_insn_hppa()
2257 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2261 (*info->fprintf_func) (info->stream, ",i"); in print_insn_hppa()
2265 (*info->fprintf_func) (info->stream, ",z"); in print_insn_hppa()
2268 (*info->fprintf_func) in print_insn_hppa()
2269 (info->stream, "%s", in print_insn_hppa()
2273 (*info->fprintf_func) in print_insn_hppa()
2274 (info->stream, ",dc%s", in print_insn_hppa()
2278 (*info->fprintf_func) in print_insn_hppa()
2279 (info->stream, ",c%s", in print_insn_hppa()
2284 (*info->fprintf_func) (info->stream, ",tsv"); in print_insn_hppa()
2287 (*info->fprintf_func) (info->stream, ",tc"); in print_insn_hppa()
2289 (*info->fprintf_func) (info->stream, ",tsv"); in print_insn_hppa()
2292 (*info->fprintf_func) (info->stream, ",db"); in print_insn_hppa()
2294 (*info->fprintf_func) (info->stream, ",tsv"); in print_insn_hppa()
2297 (*info->fprintf_func) (info->stream, ",b"); in print_insn_hppa()
2299 (*info->fprintf_func) (info->stream, ",tsv"); in print_insn_hppa()
2303 (*info->fprintf_func) (info->stream, ",tc"); in print_insn_hppa()
2308 (*info->fprintf_func) in print_insn_hppa()
2309 (info->stream, "%s", in print_insn_hppa()
2312 (*info->fprintf_func) in print_insn_hppa()
2313 (info->stream, "%s ", in print_insn_hppa()
2317 (*info->fprintf_func) in print_insn_hppa()
2318 (info->stream, "%s", in print_insn_hppa()
2322 (*info->fprintf_func) in print_insn_hppa()
2323 (info->stream, "%s ", in print_insn_hppa()
2327 (*info->fprintf_func) in print_insn_hppa()
2328 (info->stream, ",%d%d%d%d ", in print_insn_hppa()
2398 (*info->fprintf_func) in print_insn_hppa()
2399 (info->stream, "%s ", in print_insn_hppa()
2435 (*info->fprintf_func) in print_insn_hppa()
2436 (info->stream, "%s ", in print_insn_hppa()
2440 (*info->fprintf_func) in print_insn_hppa()
2441 (info->stream, "%s ", in print_insn_hppa()
2445 (*info->fprintf_func) in print_insn_hppa()
2446 (info->stream, "%s ", in print_insn_hppa()
2450 (*info->fprintf_func) in print_insn_hppa()
2451 (info->stream, "%s ", in print_insn_hppa()
2455 (*info->fprintf_func) in print_insn_hppa()
2456 (info->stream, "%s", in print_insn_hppa()
2461 (*info->fprintf_func) in print_insn_hppa()
2462 (info->stream, "%s", in print_insn_hppa()
2468 (*info->fprintf_func) in print_insn_hppa()
2469 (info->stream, "%s ", in print_insn_hppa()
2473 (*info->fprintf_func) in print_insn_hppa()
2474 (info->stream, "%s ", in print_insn_hppa()
2478 (*info->fprintf_func) in print_insn_hppa()
2479 (info->stream, "%s ", in print_insn_hppa()
2483 (*info->fprintf_func) in print_insn_hppa()
2484 (info->stream, "%s ", in print_insn_hppa()
2490 (*info->fprintf_func) in print_insn_hppa()
2491 (info->stream, "%s", in print_insn_hppa()
2497 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2500 (*info->fprintf_func) in print_insn_hppa()
2501 (info->stream, "%s ", in print_insn_hppa()
2505 (*info->fprintf_func) in print_insn_hppa()
2506 (info->stream, "%s", in print_insn_hppa()
2512 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2546 /* 16-bit long disp., PA2.0 wide only. */ in print_insn_hppa()
2551 (*info->fprintf_func) (info->stream, ",n "); in print_insn_hppa()
2553 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2557 (*info->fprintf_func) (info->stream, ",n "); in print_insn_hppa()
2559 (*info->fprintf_func) (info->stream, ",n"); in print_insn_hppa()
2561 (*info->fprintf_func) (info->stream, " "); in print_insn_hppa()
2564 (*info->print_address_func) in print_insn_hppa()
2568 /* 17 bit PC-relative branch. */ in print_insn_hppa()
2569 (*info->print_address_func) in print_insn_hppa()
2590 (*info->fprintf_func) (info->stream, "0"); in print_insn_hppa()
2594 (*info->fprintf_func) (info->stream, "%d", in print_insn_hppa()
2598 (*info->fprintf_func) (info->stream, "%d", in print_insn_hppa()
2605 (*info->fprintf_func) (info->stream, "%d", in print_insn_hppa()
2606 31 - GET_FIELD (insn, 22, 26)); in print_insn_hppa()
2613 (*info->fprintf_func) (info->stream, "%d", 63 - num); in print_insn_hppa()
2617 (*info->fprintf_func) (info->stream, "%d", in print_insn_hppa()
2625 (*info->fprintf_func) (info->stream, "%d", num); in print_insn_hppa()
2629 (*info->fprintf_func) (info->stream, "%d", in print_insn_hppa()
2630 32 - GET_FIELD (insn, 27, 31)); in print_insn_hppa()
2636 num -= GET_FIELD (insn, 27, 31); in print_insn_hppa()
2637 (*info->fprintf_func) (info->stream, "%d", num); in print_insn_hppa()
2644 num -= GET_FIELD (insn, 27, 31); in print_insn_hppa()
2645 (*info->fprintf_func) (info->stream, "%d", num); in print_insn_hppa()
2658 (*info->fprintf_func) (info->stream, ",%d", in print_insn_hppa()
2681 (*info->fprintf_func) (info->stream, ",%d", in print_insn_hppa()
2691 (*info->fprintf_func) in print_insn_hppa()
2692 (info->stream, "%s ", in print_insn_hppa()
2696 (*info->fprintf_func) in print_insn_hppa()
2697 (info->stream, "%s ", in print_insn_hppa()
2702 (*info->fprintf_func) (info->stream, "%s ", in print_insn_hppa()
2705 (*info->fprintf_func) (info->stream, "%s ", in print_insn_hppa()
2715 (*info->fprintf_func) in print_insn_hppa()
2716 (info->stream, "%s ", in print_insn_hppa()
2731 disp = (-1 << 10) | imm10; in print_insn_hppa()
2747 disp = (-1 << 11) | imm11; in print_insn_hppa()
2759 /* 16-bit long disp., PA2.0 wide only. */ in print_insn_hppa()
2768 /* 16-bit long disp., PA2.0 wide only. */ in print_insn_hppa()
2799 (*info->fprintf_func) (info->stream, "%s%s%s ", in print_insn_hppa()
2809 fput_const ((y ^ 1) - 1, info); in print_insn_hppa()
2820 (*info->fprintf_func) (info->stream, ",%d", cbit - 1); in print_insn_hppa()
2844 (*info->print_address_func) in print_insn_hppa()
2851 (*info->fprintf_func) (info->stream, "%c", *s); in print_insn_hppa()
2858 info->fprintf_func(info->stream, "<unknown>"); in print_insn_hppa()