Lines Matching +full:value +full:- +full:start

1 // SPDX-License-Identifier: GPL-2.0
43 #define OPERAND_PCREL 0x100 /* Operand printed as pc-relative symbol */
44 #define OPERAND_SIGNED 0x200 /* Operand printed as signed value */
92 I8_8, /* 8 bit signed value starting at 8 */
93 I8_32, /* 8 bit signed value starting at 32 */
94 I16_16, /* 16 bit signed value starting at 16 */
95 I16_32, /* 16 bit signed value starting at 32 */
96 I32_16, /* 32 bit signed value starting at 16 */
110 U4_8, /* 4 bit unsigned value starting at 8 */
111 U4_12, /* 4 bit unsigned value starting at 12 */
112 U4_16, /* 4 bit unsigned value starting at 16 */
113 U4_20, /* 4 bit unsigned value starting at 20 */
114 U4_24, /* 4 bit unsigned value starting at 24 */
115 U4_28, /* 4 bit unsigned value starting at 28 */
116 U4_32, /* 4 bit unsigned value starting at 32 */
117 U4_36, /* 4 bit unsigned value starting at 36 */
118 U8_8, /* 8 bit unsigned value starting at 8 */
119 U8_16, /* 8 bit unsigned value starting at 16 */
120 U8_24, /* 8 bit unsigned value starting at 24 */
121 U8_28, /* 8 bit unsigned value starting at 28 */
122 U8_32, /* 8 bit unsigned value starting at 32 */
123 U12_16, /* 12 bit unsigned value starting at 16 */
124 U16_16, /* 16 bit unsigned value starting at 16 */
125 U16_20, /* 16 bit unsigned value starting at 20 */
126 U16_32, /* 16 bit unsigned value starting at 32 */
127 U32_16, /* 32 bit unsigned value starting at 16 */
348 /* Extracts an operand value from an instruction. */
357 cp = code + operand->shift / 8; in extract_operand()
358 bits = (operand->shift & 7) + operand->bits; in extract_operand()
363 bits -= 8; in extract_operand()
365 val >>= -bits; in extract_operand()
366 val &= ((1U << (operand->bits - 1)) << 1) - 1; in extract_operand()
369 if (operand->bits == 20 && operand->shift == 20) in extract_operand()
373 if (operand->flags & OPERAND_VR) { in extract_operand()
374 if (operand->shift == 8) in extract_operand()
376 else if (operand->shift == 12) in extract_operand()
378 else if (operand->shift == 16) in extract_operand()
380 else if (operand->shift == 32) in extract_operand()
384 /* Sign extend value if the operand is signed or pc relative. */ in extract_operand()
385 if ((operand->flags & (OPERAND_SIGNED | OPERAND_PCREL)) && in extract_operand()
386 (val & (1U << (operand->bits - 1)))) in extract_operand()
387 val |= (-1U << (operand->bits - 1)) << 1; in extract_operand()
389 /* Double value if the operand is pc relative. */ in extract_operand()
390 if (operand->flags & OPERAND_PCREL) in extract_operand()
394 if (operand->flags & OPERAND_LENGTH) in extract_operand()
409 * unknown instructions as well as 1-byte opcode instructions. in find_insn()
413 if (entry->opcode == code[0]) in find_insn()
417 opfrag = *(code + entry->byte) & entry->mask; in find_insn()
419 insn = &opcode[entry->offset]; in find_insn()
420 for (i = 0; i < entry->count; i++) { in find_insn()
421 if (insn->opfrag == opfrag) in find_insn()
433 unsigned int value; in print_insn() local
441 if (insn->zero == 0) in print_insn()
443 long_insn_name[insn->offset]); in print_insn()
445 ptr += sprintf(ptr, "%.5s\t", insn->name); in print_insn()
448 for (ops = formats[insn->format], i = 0; in print_insn()
451 value = extract_operand(code, operand); in print_insn()
452 if ((operand->flags & OPERAND_INDEX) && value == 0) in print_insn()
454 if ((operand->flags & OPERAND_BASE) && in print_insn()
455 value == 0 && separator == '(') { in print_insn()
461 if (operand->flags & OPERAND_GPR) in print_insn()
462 ptr += sprintf(ptr, "%%r%u", value); in print_insn()
463 else if (operand->flags & OPERAND_FPR) in print_insn()
464 ptr += sprintf(ptr, "%%f%u", value); in print_insn()
465 else if (operand->flags & OPERAND_AR) in print_insn()
466 ptr += sprintf(ptr, "%%a%u", value); in print_insn()
467 else if (operand->flags & OPERAND_CR) in print_insn()
468 ptr += sprintf(ptr, "%%c%u", value); in print_insn()
469 else if (operand->flags & OPERAND_VR) in print_insn()
470 ptr += sprintf(ptr, "%%v%u", value); in print_insn()
471 else if (operand->flags & OPERAND_PCREL) { in print_insn()
472 void *pcrel = (void *)((int)value + addr); in print_insn()
475 } else if (operand->flags & OPERAND_SIGNED) in print_insn()
476 ptr += sprintf(ptr, "%i", (int)value); in print_insn()
478 ptr += sprintf(ptr, "%u", value); in print_insn()
479 if (operand->flags & OPERAND_DISP) in print_insn()
481 else if (operand->flags & OPERAND_BASE) { in print_insn()
489 return (int) (ptr - buffer); in print_insn()
496 return -EFAULT; in copy_from_regs()
499 return -EFAULT; in copy_from_regs()
510 int start, end, opsize, hops, i; in show_code() local
513 for (start = 32; start && regs->psw.addr >= 34 - start; start -= 2) { in show_code()
514 addr = regs->psw.addr - 34 + start; in show_code()
515 if (copy_from_regs(regs, code + start - 2, (void *)addr, 2)) in show_code()
519 addr = regs->psw.addr + end - 32; in show_code()
524 if ((regs->psw.addr & 1) || start >= end) { in show_code()
529 while (start < 32) { in show_code()
530 for (i = 0, hops = 0; start + i < 32 && hops < 3; hops++) { in show_code()
531 if (!find_insn(code + start + i)) in show_code()
533 i += insn_length(code[start + i]); in show_code()
535 if (start + i == 32) in show_code()
538 start += 2; in show_code()
544 while (start < end && hops < 8) { in show_code()
545 opsize = insn_length(code[start]); in show_code()
546 if (start + opsize == 32) in show_code()
548 else if (start == 32) in show_code()
552 addr = regs->psw.addr + start - 32; in show_code()
554 if (start + opsize >= end) in show_code()
557 ptr += sprintf(ptr, "%02x", code[start + i]); in show_code()
561 ptr += print_insn(ptr, code + start, addr); in show_code()
562 start += opsize; in show_code()
592 len -= opsize; in print_fn_code()