Advertisement
Guest User

Untitled

a guest
Sep 11th, 2022
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.26 KB | None | 0 0
  1. static const struct powerpc_opcode *
  2. svp64_lookup (uint64_t insn, ppc_cpu_t dialect,
  3.     struct svp64_ctx *svp64)
  4. {
  5.   uint32_t suffix;
  6.   unsigned long op;
  7.   const struct powerpc_opcode *opcode;
  8.   const struct svp64_record *record;
  9.   const struct svp64_record *record_end;
  10.  
  11.   svp64_insn_set (&svp64->insn, insn);
  12.  
  13.   if ((svp64_insn_get_prefix_PO (&svp64->insn) != 0x1) ||
  14.       (svp64_insn_get_prefix_id (&svp64->insn) != 0x3))
  15.     return NULL;
  16.  
  17.   suffix = (uint32_t)svp64_insn_get_suffix (&svp64->insn);
  18.   opcode = lookup_powerpc (suffix, dialect & ~PPC_OPCODE_ANY);
  19.   if (opcode == NULL && (dialect & PPC_OPCODE_ANY) != 0)
  20.     opcode = lookup_powerpc (suffix, dialect);
  21.   if (opcode == NULL)
  22.     return NULL;
  23.  
  24.   op = SVP64_OP (suffix);
  25.   record_end = (svp64_records + svp64_record_indices[op + 1]);
  26.   for (record = svp64_records + svp64_record_indices[op];
  27.        record < record_end;
  28.        ++record)
  29.     {
  30.       /* binutils consider Rc bit to be a part of the mask.
  31.      SVP64, however, has per-instruction mask.  */
  32.       if ((record->opcode.value & record->opcode.mask) ==
  33.         ((opcode->opcode & opcode->mask) & record->opcode.mask))
  34.     break;
  35.     }
  36.   if (record == record_end)
  37.     return NULL;
  38.  
  39.   svp64->desc = &record->desc;
  40.  
  41.   return opcode;
  42. }
  43.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement