Guest User

Untitled

a guest
Sep 22nd, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 96.62 KB | None | 0 0
  1. diff --git a/bfd/archures.c b/bfd/archures.c
  2. index e83c57a..8e65a3d 100644
  3. --- a/bfd/archures.c
  4. +++ b/bfd/archures.c
  5. @@ -193,7 +193,9 @@ DESCRIPTION
  6. .#define bfd_mach_mips5 5
  7. .#define bfd_mach_mips_loongson_2e 3001
  8. .#define bfd_mach_mips_loongson_2f 3002
  9. -.#define bfd_mach_mips_loongson_3a 3003
  10. +.#define bfd_mach_mips_gs464 3003
  11. +.#define bfd_mach_mips_gs464e 3004
  12. +.#define bfd_mach_mips_gs264e 3005
  13. .#define bfd_mach_mips_sb1 12310201 {* octal 'SB', 01. *}
  14. .#define bfd_mach_mips_octeon 6501
  15. .#define bfd_mach_mips_octeonp 6601
  16. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
  17. index f4b3720..95078d1 100644
  18. --- a/bfd/bfd-in2.h
  19. +++ b/bfd/bfd-in2.h
  20. @@ -2054,7 +2054,9 @@ enum bfd_architecture
  21. #define bfd_mach_mips5 5
  22. #define bfd_mach_mips_loongson_2e 3001
  23. #define bfd_mach_mips_loongson_2f 3002
  24. -#define bfd_mach_mips_loongson_3a 3003
  25. +#define bfd_mach_mips_gs464 3003
  26. +#define bfd_mach_mips_gs464e 3004
  27. +#define bfd_mach_mips_gs264e 3005
  28. #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01. */
  29. #define bfd_mach_mips_octeon 6501
  30. #define bfd_mach_mips_octeonp 6601
  31. diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c
  32. index cb50c64..339b111 100644
  33. --- a/bfd/cpu-mips.c
  34. +++ b/bfd/cpu-mips.c
  35. @@ -98,7 +98,9 @@ enum
  36. I_sb1,
  37. I_loongson_2e,
  38. I_loongson_2f,
  39. - I_loongson_3a,
  40. + I_gs464,
  41. + I_gs464e,
  42. + I_gs264e,
  43. I_mipsocteon,
  44. I_mipsocteonp,
  45. I_mipsocteon2,
  46. @@ -150,7 +152,9 @@ static const bfd_arch_info_type arch_info_struct[] =
  47. N (64, 64, bfd_mach_mips_sb1, "mips:sb1", FALSE, NN(I_sb1)),
  48. N (64, 64, bfd_mach_mips_loongson_2e, "mips:loongson_2e", FALSE, NN(I_loongson_2e)),
  49. N (64, 64, bfd_mach_mips_loongson_2f, "mips:loongson_2f", FALSE, NN(I_loongson_2f)),
  50. - N (64, 64, bfd_mach_mips_loongson_3a, "mips:loongson_3a", FALSE, NN(I_loongson_3a)),
  51. + N (64, 64, bfd_mach_mips_gs464, "mips:gs464", FALSE, NN(I_gs464)),
  52. + N (64, 64, bfd_mach_mips_gs464e, "mips:gs464e", FALSE, NN(I_gs464e)),
  53. + N (64, 64, bfd_mach_mips_gs264e, "mips:gs264e", FALSE, NN(I_gs264e)),
  54. N (64, 64, bfd_mach_mips_octeon,"mips:octeon", FALSE, NN(I_mipsocteon)),
  55. N (64, 64, bfd_mach_mips_octeonp,"mips:octeon+", FALSE, NN(I_mipsocteonp)),
  56. N (64, 64, bfd_mach_mips_octeon2,"mips:octeon2", FALSE, NN(I_mipsocteon2)),
  57. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
  58. index b237957..556560f 100644
  59. --- a/bfd/elfxx-mips.c
  60. +++ b/bfd/elfxx-mips.c
  61. @@ -6815,8 +6815,14 @@ _bfd_elf_mips_mach (flagword flags)
  62. case E_MIPS_MACH_LS2F:
  63. return bfd_mach_mips_loongson_2f;
  64.  
  65. - case E_MIPS_MACH_LS3A:
  66. - return bfd_mach_mips_loongson_3a;
  67. + case E_MIPS_MACH_GS464:
  68. + return bfd_mach_mips_gs464;
  69. +
  70. + case E_MIPS_MACH_GS464E:
  71. + return bfd_mach_mips_gs464e;
  72. +
  73. + case E_MIPS_MACH_GS264E:
  74. + return bfd_mach_mips_gs264e;
  75.  
  76. case E_MIPS_MACH_OCTEON3:
  77. return bfd_mach_mips_octeon3;
  78. @@ -11888,8 +11894,8 @@ mips_set_isa_flags (bfd *abfd)
  79. switch (bfd_get_mach (abfd))
  80. {
  81. default:
  82. - case bfd_mach_mips_loongson_3a:
  83. - val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
  84. + case bfd_mach_mips_gs464:
  85. + val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464;
  86. break;
  87.  
  88. case bfd_mach_mips3000:
  89. @@ -11973,6 +11979,14 @@ mips_set_isa_flags (bfd *abfd)
  90. val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
  91. break;
  92.  
  93. + case bfd_mach_mips_gs464e:
  94. + val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464E;
  95. + break;
  96. +
  97. + case bfd_mach_mips_gs264e:
  98. + val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS264E;
  99. + break;
  100. +
  101. case bfd_mach_mips_octeon:
  102. case bfd_mach_mips_octeonp:
  103. val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
  104. @@ -13962,7 +13976,9 @@ static const struct mips_mach_extension mips_mach_extensions[] =
  105. { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
  106. { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
  107. { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
  108. - { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
  109. + { bfd_mach_mips_gs264e, bfd_mach_mips_gs464e },
  110. + { bfd_mach_mips_gs464e, bfd_mach_mips_gs464 },
  111. + { bfd_mach_mips_gs464, bfd_mach_mipsisa64r2 },
  112.  
  113. /* MIPS64 extensions. */
  114. { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
  115. @@ -14074,7 +14090,6 @@ bfd_mips_isa_ext_mach (unsigned int isa_ext)
  116. case AFL_EXT_10000: return bfd_mach_mips10000;
  117. case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
  118. case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
  119. - case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
  120. case AFL_EXT_SB1: return bfd_mach_mips_sb1;
  121. case AFL_EXT_OCTEON: return bfd_mach_mips_octeon;
  122. case AFL_EXT_OCTEONP: return bfd_mach_mips_octeonp;
  123. @@ -14103,7 +14118,6 @@ bfd_mips_isa_ext (bfd *abfd)
  124. case bfd_mach_mips10000: return AFL_EXT_10000;
  125. case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
  126. case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
  127. - case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
  128. case bfd_mach_mips_sb1: return AFL_EXT_SB1;
  129. case bfd_mach_mips_octeon: return AFL_EXT_OCTEON;
  130. case bfd_mach_mips_octeonp: return AFL_EXT_OCTEONP;
  131. @@ -14219,7 +14233,7 @@ infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
  132. && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
  133. && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
  134. && abiflags->isa_level >= 32
  135. - && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
  136. + && abiflags->ases != AFL_ASE_LOONGSON_EXT)
  137. abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
  138. }
  139.  
  140. @@ -15644,6 +15658,14 @@ print_mips_ases (FILE *file, unsigned int mask)
  141. fputs ("\n\tXPA ASE", file);
  142. if (mask & AFL_ASE_MIPS16E2)
  143. fputs ("\n\tMIPS16e2 ASE", file);
  144. + if (mask & AFL_ASE_LOONGSON_MMI)
  145. + fputs ("\n\tLoongson MMI ASE", file);
  146. + if (mask & AFL_ASE_LOONGSON_CAM)
  147. + fputs ("\n\tLoongson CAM ASE", file);
  148. + if (mask & AFL_ASE_LOONGSON_EXT)
  149. + fputs ("\n\tLoongson EXT ASE", file);
  150. + if (mask & AFL_ASE_LOONGSON_EXT2)
  151. + fputs ("\n\tLoongson EXT2 ASE", file);
  152. if (mask == 0)
  153. fprintf (file, "\n\t%s", _("None"));
  154. else if ((mask & ~AFL_ASE_MASK) != 0)
  155. @@ -15670,9 +15692,6 @@ print_mips_isa_ext (FILE *file, unsigned int isa_ext)
  156. case AFL_EXT_OCTEONP:
  157. fputs ("Cavium Networks OcteonP", file);
  158. break;
  159. - case AFL_EXT_LOONGSON_3A:
  160. - fputs ("Loongson 3A", file);
  161. - break;
  162. case AFL_EXT_OCTEON:
  163. fputs ("Cavium Networks Octeon", file);
  164. break;
  165. diff --git a/binutils/MAINTAINERS b/binutils/MAINTAINERS
  166. index 3bb542d..92c7b74 100644
  167. --- a/binutils/MAINTAINERS
  168. +++ b/binutils/MAINTAINERS
  169. @@ -104,6 +104,7 @@ responsibility among the other maintainers.
  170. MEP Dave Brolley <brolley@redhat.com>
  171. METAG Markos Chandras <markos.chandras@imgtec.com>
  172. MICROBLAZE Michael Eager <eager@eagercon.com>
  173. + MIPS Chenghua Xu <paul.hua.gm@gmail.com>
  174. MIPS Maciej W. Rozycki <macro@mips.com>
  175. MMIX Hans-Peter Nilsson <hp@bitrange.com>
  176. MN10300 Alexandre Oliva <aoliva@redhat.com>
  177. diff --git a/binutils/readelf.c b/binutils/readelf.c
  178. index 761c8d5..ee193f5 100644
  179. --- a/binutils/readelf.c
  180. +++ b/binutils/readelf.c
  181. @@ -3366,7 +3366,9 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine)
  182. case E_MIPS_MACH_9000: strcat (buf, ", 9000"); break;
  183. case E_MIPS_MACH_LS2E: strcat (buf, ", loongson-2e"); break;
  184. case E_MIPS_MACH_LS2F: strcat (buf, ", loongson-2f"); break;
  185. - case E_MIPS_MACH_LS3A: strcat (buf, ", loongson-3a"); break;
  186. + case E_MIPS_MACH_GS464: strcat (buf, ", gs464"); break;
  187. + case E_MIPS_MACH_GS464E: strcat (buf, ", gs464e"); break;
  188. + case E_MIPS_MACH_GS264E: strcat (buf, ", gs264e"); break;
  189. case E_MIPS_MACH_OCTEON: strcat (buf, ", octeon"); break;
  190. case E_MIPS_MACH_OCTEON2: strcat (buf, ", octeon2"); break;
  191. case E_MIPS_MACH_OCTEON3: strcat (buf, ", octeon3"); break;
  192. @@ -15455,6 +15457,14 @@ print_mips_ases (unsigned int mask)
  193. fputs ("\n\tXPA ASE", stdout);
  194. if (mask & AFL_ASE_MIPS16E2)
  195. fputs ("\n\tMIPS16e2 ASE", stdout);
  196. + if (mask & AFL_ASE_LOONGSON_MMI)
  197. + fputs ("\n\tLoongson MMI ASE", stdout);
  198. + if (mask & AFL_ASE_LOONGSON_CAM)
  199. + fputs ("\n\tLoongson CAM ASE", stdout);
  200. + if (mask & AFL_ASE_LOONGSON_EXT)
  201. + fputs ("\n\tLoongson EXT ASE", stdout);
  202. + if (mask & AFL_ASE_LOONGSON_EXT2)
  203. + fputs ("\n\tLoongson EXT2 ASE", stdout);
  204. if (mask == 0)
  205. fprintf (stdout, "\n\t%s", _("None"));
  206. else if ((mask & ~AFL_ASE_MASK) != 0)
  207. @@ -15481,9 +15491,6 @@ print_mips_isa_ext (unsigned int isa_ext)
  208. case AFL_EXT_OCTEONP:
  209. fputs ("Cavium Networks OcteonP", stdout);
  210. break;
  211. - case AFL_EXT_LOONGSON_3A:
  212. - fputs ("Loongson 3A", stdout);
  213. - break;
  214. case AFL_EXT_OCTEON:
  215. fputs ("Cavium Networks Octeon", stdout);
  216. break;
  217. diff --git a/elfcpp/mips.h b/elfcpp/mips.h
  218. index cac8592..c724fd0 100644
  219. --- a/elfcpp/mips.h
  220. +++ b/elfcpp/mips.h
  221. @@ -235,7 +235,9 @@ enum
  222. E_MIPS_MACH_9000 = 0x00990000,
  223. E_MIPS_MACH_LS2E = 0x00A00000,
  224. E_MIPS_MACH_LS2F = 0x00A10000,
  225. - E_MIPS_MACH_LS3A = 0x00A20000,
  226. + E_MIPS_MACH_GS464 = 0x00A20000,
  227. + E_MIPS_MACH_GS464E = 0x00A30000,
  228. + E_MIPS_MACH_GS264E = 0x00A40000,
  229. };
  230.  
  231. // MIPS architecture
  232. @@ -308,7 +310,9 @@ enum
  233. // MICROMIPS ASE.
  234. AFL_ASE_MICROMIPS = 0x00000800,
  235. // XPA ASE.
  236. - AFL_ASE_XPA = 0x00001000
  237. + AFL_ASE_XPA = 0x00001000,
  238. + // Loongson EXT ASE.
  239. + AFL_ASE_LOONGSON_EXT = 0x00002000
  240. };
  241.  
  242. // Values for the isa_ext word of an ABI flags structure.
  243. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
  244. index 8c0cda9..a221800 100644
  245. --- a/gas/config/tc-mips.c
  246. +++ b/gas/config/tc-mips.c
  247. @@ -422,7 +422,9 @@ static int mips_32bitmode = 0;
  248. || (ISA) == ISA_MIPS64R5 \
  249. || (ISA) == ISA_MIPS64R6 \
  250. || (CPU) == CPU_R5900) \
  251. - && (CPU) != CPU_LOONGSON_3A)
  252. + && ((CPU) != CPU_GS464 \
  253. + || (CPU) != CPU_GS464E \
  254. + || (CPU) != CPU_GS264E))
  255.  
  256. /* Return true if ISA supports move to/from high part of a 64-bit
  257. floating-point register. */
  258. @@ -1540,6 +1542,14 @@ enum options
  259. OPTION_NAN,
  260. OPTION_ODD_SPREG,
  261. OPTION_NO_ODD_SPREG,
  262. + OPTION_LOONGSON_MMI,
  263. + OPTION_NO_LOONGSON_MMI,
  264. + OPTION_LOONGSON_CAM,
  265. + OPTION_NO_LOONGSON_CAM,
  266. + OPTION_LOONGSON_EXT,
  267. + OPTION_NO_LOONGSON_EXT,
  268. + OPTION_LOONGSON_EXT2,
  269. + OPTION_NO_LOONGSON_EXT2,
  270. OPTION_END_OF_ENUM
  271. };
  272.  
  273. @@ -1596,6 +1606,14 @@ struct option md_longopts[] =
  274. {"mno-xpa", no_argument, NULL, OPTION_NO_XPA},
  275. {"mmips16e2", no_argument, NULL, OPTION_MIPS16E2},
  276. {"mno-mips16e2", no_argument, NULL, OPTION_NO_MIPS16E2},
  277. + {"mloongson-mmi", no_argument, NULL, OPTION_LOONGSON_MMI},
  278. + {"mno-loongson-mmi", no_argument, NULL, OPTION_NO_LOONGSON_MMI},
  279. + {"mloongson-cam", no_argument, NULL, OPTION_LOONGSON_CAM},
  280. + {"mno-loongson-cam", no_argument, NULL, OPTION_NO_LOONGSON_CAM},
  281. + {"mloongson-ext", no_argument, NULL, OPTION_LOONGSON_EXT},
  282. + {"mno-loongson-ext", no_argument, NULL, OPTION_NO_LOONGSON_EXT},
  283. + {"mloongson-ext2", no_argument, NULL, OPTION_LOONGSON_EXT2},
  284. + {"mno-loongson-ext2", no_argument, NULL, OPTION_NO_LOONGSON_EXT2},
  285.  
  286. /* Old-style architecture options. Don't add more of these. */
  287. {"m4650", no_argument, NULL, OPTION_M4650},
  288. @@ -1787,6 +1805,26 @@ static const struct mips_ase mips_ases[] = {
  289. OPTION_MIPS16E2, OPTION_NO_MIPS16E2,
  290. 2, 2, -1, -1,
  291. 6 },
  292. +
  293. + { "loongson-mmi", ASE_LOONGSON_MMI, 0,
  294. + OPTION_LOONGSON_MMI, OPTION_NO_LOONGSON_MMI,
  295. + 0, 0, -1, -1,
  296. + -1 },
  297. +
  298. + { "loongson-cam", ASE_LOONGSON_CAM, 0,
  299. + OPTION_LOONGSON_CAM, OPTION_NO_LOONGSON_CAM,
  300. + 0, 0, -1, -1,
  301. + -1 },
  302. +
  303. + { "loongson-ext", ASE_LOONGSON_EXT, 0,
  304. + OPTION_LOONGSON_EXT, OPTION_NO_LOONGSON_EXT,
  305. + 0, 0, -1, -1,
  306. + -1 },
  307. +
  308. + { "loongson-ext2", ASE_LOONGSON_EXT | ASE_LOONGSON_EXT2, 0,
  309. + OPTION_LOONGSON_EXT2, OPTION_NO_LOONGSON_EXT2,
  310. + 0, 0, -1, -1,
  311. + -1 },
  312. };
  313.  
  314. /* The set of ASEs that require -mfp64. */
  315. @@ -1794,7 +1832,8 @@ static const struct mips_ase mips_ases[] = {
  316.  
  317. /* Groups of ASE_* flags that represent different revisions of an ASE. */
  318. static const unsigned int mips_ase_groups[] = {
  319. - ASE_DSP | ASE_DSPR2 | ASE_DSPR3
  320. + ASE_DSP | ASE_DSPR2 | ASE_DSPR3,
  321. + ASE_LOONGSON_EXT | ASE_LOONGSON_EXT2
  322. };
  323. /* Pseudo-op table.
  324. @@ -19114,6 +19153,14 @@ mips_convert_ase_flags (int ase)
  325. ext_ases |= AFL_ASE_XPA;
  326. if (ase & ASE_MIPS16E2)
  327. ext_ases |= file_ase_mips16 ? AFL_ASE_MIPS16E2 : 0;
  328. + if (ase & ASE_LOONGSON_MMI)
  329. + ext_ases |= AFL_ASE_LOONGSON_MMI;
  330. + if (ase & ASE_LOONGSON_CAM)
  331. + ext_ases |= AFL_ASE_LOONGSON_CAM;
  332. + if (ase & ASE_LOONGSON_EXT)
  333. + ext_ases |= AFL_ASE_LOONGSON_EXT;
  334. + if (ase & ASE_LOONGSON_EXT2)
  335. + ext_ases |= AFL_ASE_LOONGSON_EXT2;
  336.  
  337. return ext_ases;
  338. }
  339. @@ -19760,7 +19807,7 @@ static const struct mips_cpu_info mips_cpu_info_table[] =
  340. { "r5900", 0, 0, ISA_MIPS3, CPU_R5900 },
  341. /* ST Microelectronics Loongson 2E and 2F cores */
  342. { "loongson2e", 0, 0, ISA_MIPS3, CPU_LOONGSON_2E },
  343. - { "loongson2f", 0, 0, ISA_MIPS3, CPU_LOONGSON_2F },
  344. + { "loongson2f", 0, ASE_LOONGSON_MMI, ISA_MIPS3, CPU_LOONGSON_2F },
  345.  
  346. /* MIPS IV */
  347. { "r8000", 0, 0, ISA_MIPS4, CPU_R8000 },
  348. @@ -19859,9 +19906,17 @@ static const struct mips_cpu_info mips_cpu_info_table[] =
  349. /* Broadcom SB-1A CPU core */
  350. { "sb1a", 0, ASE_MIPS3D | ASE_MDMX, ISA_MIPS64, CPU_SB1 },
  351.  
  352. - { "loongson3a", 0, 0, ISA_MIPS64R2, CPU_LOONGSON_3A },
  353. -
  354. /* MIPS 64 Release 2 */
  355. + /* Loongson CPU core */
  356. + /* -march=loongson3a is an alias of -march=gs464 for compatibility */
  357. + { "loongson3a", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT,
  358. + ISA_MIPS64R2, CPU_GS464 },
  359. + { "gs464", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT,
  360. + ISA_MIPS64R2, CPU_GS464 },
  361. + { "gs464e", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT
  362. + | ASE_LOONGSON_EXT2, ISA_MIPS64R2, CPU_GS464E },
  363. + { "gs264e", 0, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT
  364. + | ASE_LOONGSON_EXT2 | ASE_MSA | ASE_MSA64, ISA_MIPS64R2, CPU_GS264E },
  365.  
  366. /* Cavium Networks Octeon CPU core */
  367. { "octeon", 0, 0, ISA_MIPS64R2, CPU_OCTEON },
  368. @@ -20125,6 +20180,18 @@ MIPS options:\n\
  369. -mvirt generate Virtualization instructions\n\
  370. -mno-virt do not generate Virtualization instructions\n"));
  371. fprintf (stream, _("\
  372. +-mloongson-mmi generate Loongson MultiMedia extensions Instructions (MMI) instructions\n\
  373. +-mno-loongson-mmi do not generate Loongson MultiMedia extensions Instructions\n"));
  374. + fprintf (stream, _("\
  375. +-mloongson-cam generate Loongson Content Address Memory (CAM) instructions\n\
  376. +-mno-loongson-cam do not generate Loongson Content Address Memory Instructions\n"));
  377. + fprintf (stream, _("\
  378. +-mloongson-ext generate Loongson EXTensions (EXT) instructions\n\
  379. +-mno-loongson-ext do not generate Loongson EXTensions Instructions\n"));
  380. + fprintf (stream, _("\
  381. +-mloongson-ext2 generate Loongson EXTensions R2 (EXT2) instructions\n\
  382. +-mno-loongson-ext2 do not generate Loongson EXTensions R2 Instructions\n"));
  383. + fprintf (stream, _("\
  384. -minsn32 only generate 32-bit microMIPS instructions\n\
  385. -mno-insn32 generate all microMIPS instructions\n"));
  386. fprintf (stream, _("\
  387. diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi
  388. index 650d886..3d4c93e 100644
  389. --- a/gas/doc/c-mips.texi
  390. +++ b/gas/doc/c-mips.texi
  391. @@ -234,6 +234,34 @@ Generate code for the Virtualization Application Specific Extension.
  392. This tells the assembler to accept Virtualization instructions.
  393. @samp{-mno-virt} turns off this option.
  394.  
  395. +@item -mloongson-mmi
  396. +@itemx -mno-loongson-mmi
  397. +Generate code for the Loongson MultiMedia extensions Instructions (MMI)
  398. +Application Specific Extension. This tells the assembler to accept MMI
  399. +instructions.
  400. +@samp{-mno-loongson-mmi} turns off this option.
  401. +
  402. +@item -mloongson-cam
  403. +@itemx -mno-loongson-cam
  404. +Generate code for the Loongson Content Address Memory (CAM)
  405. +Application Specific Extension. This tells the assembler to accept CAM
  406. +instructions.
  407. +@samp{-mno-loongson-cam} turns off this option.
  408. +
  409. +@item -mloongson-ext
  410. +@itemx -mno-loongson-ext
  411. +Generate code for the Loongson EXTensions (EXT) instructions
  412. +Application Specific Extension. This tells the assembler to accept EXT
  413. +instructions.
  414. +@samp{-mno-loongson-ext} turns off this option.
  415. +
  416. +@item -mloongson-ext2
  417. +@itemx -mno-loongson-ext2
  418. +Generate code for the Loongson EXTensions R2 (EXT2) instructions
  419. +Application Specific Extension. This tells the assembler to accept EXT2
  420. +instructions.
  421. +@samp{-mno-loongson-ext2} turns off this option.
  422. +
  423. @item -minsn32
  424. @itemx -mno-insn32
  425. Only use 32-bit instruction encodings when generating code for the
  426. @@ -397,7 +425,9 @@ i6400,
  427. p6600,
  428. loongson2e,
  429. loongson2f,
  430. -loongson3a,
  431. +gs464,
  432. +gs464e,
  433. +gs264e,
  434. octeon,
  435. octeon+,
  436. octeon2,
  437. @@ -1134,6 +1164,39 @@ float-point operations. These directives always override the default
  438. (that double-precision operations are accepted) or the command-line
  439. options (@samp{-msingle-float} and @samp{-mdouble-float}).
  440.  
  441. +@cindex Loongson MultiMedia extensions Instructions (MMI) generation override
  442. +@kindex @code{.set loongson-mmi}
  443. +@kindex @code{.set noloongson-mmi}
  444. +The directive @code{.set loongson-mmi} makes the assembler accept
  445. +instructions from the MMI Extension from that point on in the assembly.
  446. +The @code{.set noloongson-mmi} directive prevents MMI instructions from
  447. +being accepted.
  448. +
  449. +@cindex Loongson Content Address Memory (CAM) generation override
  450. +@kindex @code{.set loongson-cam}
  451. +@kindex @code{.set noloongson-cam}
  452. +The directive @code{.set loongson-cam} makes the assembler accept
  453. +instructions from the Loongson CAM from that point on in the assembly.
  454. +The @code{.set noloongson-cam} directive prevents Loongson CAM instructions
  455. +from being accepted.
  456. +
  457. +@cindex Loongson EXTensions (EXT) instructions generation override
  458. +@kindex @code{.set loongson-ext}
  459. +@kindex @code{.set noloongson-ext}
  460. +The directive @code{.set loongson-ext} makes the assembler accept
  461. +instructions from the Loongson EXT from that point on in the assembly.
  462. +The @code{.set noloongson-ext} directive prevents Loongson EXT instructions
  463. +from being accepted.
  464. +
  465. +@cindex Loongson EXTensions R2 (EXT2) instructions generation override
  466. +@kindex @code{.set loongson-ext2}
  467. +@kindex @code{.set noloongson-ext2}
  468. +The directive @code{.set loongson-ext2} makes the assembler accept
  469. +instructions from the Loongson EXT2 from that point on in the assembly.
  470. +This directive implies @code{.set loognson-ext}.
  471. +The @code{.set noloongson-ext2} directive prevents Loongson EXT2 instructions
  472. +from being accepted.
  473. +
  474. Traditional MIPS assemblers do not support these directives.
  475.  
  476. @node MIPS Syntax
  477. diff --git a/gas/testsuite/gas/mips/loongson-2f-mmi.d b/gas/testsuite/gas/mips/loongson-2f-mmi.d
  478. new file mode 100644
  479. index 0000000..84224f9
  480. --- /dev/null
  481. +++ b/gas/testsuite/gas/mips/loongson-2f-mmi.d
  482. @@ -0,0 +1,106 @@
  483. +#as: -march=loongson2f -mabi=o64
  484. +#objdump: -M reg-names=numeric -dp
  485. +#name: Loongson-2F MMI tests
  486. +
  487. +.*: file format .*
  488. +
  489. +private flags = .*
  490. +
  491. +MIPS ABI Flags Version: 0
  492. +ISA: .*
  493. +GPR size: .*
  494. +CPR1 size: .*
  495. +CPR2 size: .*
  496. +FP ABI: .*
  497. +ISA Extension: ST Microelectronics Loongson 2F
  498. +ASEs:
  499. + Loongson MMI ASE
  500. +FLAGS 1: .*
  501. +FLAGS 2: .*
  502. +
  503. +Disassembly of section .text:
  504. +
  505. +[0-9a-f]+ <simd_insns>:
  506. +.*: 4b420802 packsshb \$f0,\$f1,\$f2
  507. +.*: 4b2520c2 packsswh \$f3,\$f4,\$f5
  508. +.*: 4b683982 packushb \$f6,\$f7,\$f8
  509. +.*: 4bcb5240 paddb \$f9,\$f10,\$f11
  510. +.*: 4b4e6b00 paddh \$f12,\$f13,\$f14
  511. +.*: 4b7183c0 paddw \$f15,\$f16,\$f17
  512. +.*: 4bf49c80 paddd \$f18,\$f19,\$f20
  513. +.*: 4b97b540 paddsb \$f21,\$f22,\$f23
  514. +.*: 4b1ace00 paddsh \$f24,\$f25,\$f26
  515. +.*: 4bbde6c0 paddusb \$f27,\$f28,\$f29
  516. +.*: 4b220800 paddush \$f0,\$f1,\$f2
  517. +.*: 4be520c2 pandn \$f3,\$f4,\$f5
  518. +.*: 4b283988 pavgb \$f6,\$f7,\$f8
  519. +.*: 4b0b5248 pavgh \$f9,\$f10,\$f11
  520. +.*: 4b8e6b09 pcmpeqb \$f12,\$f13,\$f14
  521. +.*: 4b5183c9 pcmpeqh \$f15,\$f16,\$f17
  522. +.*: 4b149c89 pcmpeqw \$f18,\$f19,\$f20
  523. +.*: 4bb7b549 pcmpgtb \$f21,\$f22,\$f23
  524. +.*: 4b7ace09 pcmpgth \$f24,\$f25,\$f26
  525. +.*: 4b3de6c9 pcmpgtw \$f27,\$f28,\$f29
  526. +.*: 4b42080e pextrh \$f0,\$f1,\$f2
  527. +.*: 4b8520c3 pinsrh_0 \$f3,\$f4,\$f5
  528. +.*: 4ba83983 pinsrh_1 \$f6,\$f7,\$f8
  529. +.*: 4bcb5243 pinsrh_2 \$f9,\$f10,\$f11
  530. +.*: 4bee6b03 pinsrh_3 \$f12,\$f13,\$f14
  531. +.*: 4b7183ce pmaddhw \$f15,\$f16,\$f17
  532. +.*: 4b549c88 pmaxsh \$f18,\$f19,\$f20
  533. +.*: 4b97b548 pmaxub \$f21,\$f22,\$f23
  534. +.*: 4b7ace08 pminsh \$f24,\$f25,\$f26
  535. +.*: 4bbde6c8 pminub \$f27,\$f28,\$f29
  536. +.*: 4ba0080f pmovmskb \$f0,\$f1
  537. +.*: 4ba4188a pmulhuh \$f2,\$f3,\$f4
  538. +.*: 4b67314a pmulhh \$f5,\$f6,\$f7
  539. +.*: 4b4a4a0a pmullh \$f8,\$f9,\$f10
  540. +.*: 4b8d62ca pmuluw \$f11,\$f12,\$f13
  541. +.*: 4b307b8d pasubub \$f14,\$f15,\$f16
  542. +.*: 4b80944f biadd \$f17,\$f18
  543. +.*: 4b15a4c2 pshufh \$f19,\$f20,\$f21
  544. +.*: 4b38bd8a psllh \$f22,\$f23,\$f24
  545. +.*: 4b1bd64a psllw \$f25,\$f26,\$f27
  546. +.*: 4b7eef0b psrah \$f28,\$f29,\$f30
  547. +.*: 4b42080b psraw \$f0,\$f1,\$f2
  548. +.*: 4b2520cb psrlh \$f3,\$f4,\$f5
  549. +.*: 4b08398b psrlw \$f6,\$f7,\$f8
  550. +.*: 4bcb5241 psubb \$f9,\$f10,\$f11
  551. +.*: 4b4e6b01 psubh \$f12,\$f13,\$f14
  552. +.*: 4b7183c1 psubw \$f15,\$f16,\$f17
  553. +.*: 4bf49c81 psubd \$f18,\$f19,\$f20
  554. +.*: 4b97b541 psubsb \$f21,\$f22,\$f23
  555. +.*: 4b1ace01 psubsh \$f24,\$f25,\$f26
  556. +.*: 4bbde6c1 psubusb \$f27,\$f28,\$f29
  557. +.*: 4b220801 psubush \$f0,\$f1,\$f2
  558. +.*: 4b6520c3 punpckhbh \$f3,\$f4,\$f5
  559. +.*: 4b283983 punpckhhw \$f6,\$f7,\$f8
  560. +.*: 4bab524b punpckhwd \$f9,\$f10,\$f11
  561. +.*: 4b4e6b03 punpcklbh \$f12,\$f13,\$f14
  562. +.*: 4b1183c3 punpcklhw \$f15,\$f16,\$f17
  563. +.*: 4b949c8b punpcklwd \$f18,\$f19,\$f20
  564. +
  565. +[0-9a-f]+ <fixed_point_insns>:
  566. +.*: 4b42080c add \$f0,\$f1,\$f2
  567. +.*: 4b0520cc addu \$f3,\$f4,\$f5
  568. +.*: 4b68398c dadd \$f6,\$f7,\$f8
  569. +.*: 4b4b524d sub \$f9,\$f10,\$f11
  570. +.*: 4b0e6b0d subu \$f12,\$f13,\$f14
  571. +.*: 4b7183cd dsub \$f15,\$f16,\$f17
  572. +.*: 4b349c8c or \$f18,\$f19,\$f20
  573. +.*: 4b17b54e sll \$f21,\$f22,\$f23
  574. +.*: 4b3ace0e dsll \$f24,\$f25,\$f26
  575. +.*: 4b9de6c2 xor \$f27,\$f28,\$f29
  576. +.*: 4ba20802 nor \$f0,\$f1,\$f2
  577. +.*: 4bc520c2 and \$f3,\$f4,\$f5
  578. +.*: 4b08398f srl \$f6,\$f7,\$f8
  579. +.*: 4b2b524f dsrl \$f9,\$f10,\$f11
  580. +.*: 4b4e6b0f sra \$f12,\$f13,\$f14
  581. +.*: 4b7183cf dsra \$f15,\$f16,\$f17
  582. +.*: 4b93900c sequ \$f18,\$f19
  583. +.*: 4b95a00d sltu \$f20,\$f21
  584. +.*: 4b97b00e sleu \$f22,\$f23
  585. +.*: 4bb9c00c seq \$f24,\$f25
  586. +.*: 4bbbd00d slt \$f26,\$f27
  587. +.*: 4bbde00e sle \$f28,\$f29
  588. +#pass
  589. diff --git a/gas/testsuite/gas/mips/loongson-2f-mmi.s b/gas/testsuite/gas/mips/loongson-2f-mmi.s
  590. new file mode 100644
  591. index 0000000..e87d66e
  592. --- /dev/null
  593. +++ b/gas/testsuite/gas/mips/loongson-2f-mmi.s
  594. @@ -0,0 +1,86 @@
  595. + .text
  596. + .set noreorder
  597. +
  598. +simd_insns:
  599. + packsshb $f0, $f1, $f2
  600. + packsswh $f3, $f4, $f5
  601. + packushb $f6, $f7, $f8
  602. + paddb $f9, $f10, $f11
  603. + paddh $f12, $f13, $f14
  604. + paddw $f15, $f16, $f17
  605. + paddd $f18, $f19, $f20
  606. + paddsb $f21, $f22, $f23
  607. + paddsh $f24, $f25, $f26
  608. + paddusb $f27, $f28, $f29
  609. + paddush $f0, $f1, $f2
  610. + pandn $f3, $f4, $f5
  611. + pavgb $f6, $f7, $f8
  612. + pavgh $f9, $f10, $f11
  613. + pcmpeqb $f12, $f13, $f14
  614. + pcmpeqh $f15, $f16, $f17
  615. + pcmpeqw $f18, $f19, $f20
  616. + pcmpgtb $f21, $f22, $f23
  617. + pcmpgth $f24, $f25, $f26
  618. + pcmpgtw $f27, $f28, $f29
  619. + pextrh $f0, $f1, $f2
  620. + pinsrh_0 $f3, $f4, $f5
  621. + pinsrh_1 $f6, $f7, $f8
  622. + pinsrh_2 $f9, $f10, $f11
  623. + pinsrh_3 $f12, $f13, $f14
  624. + pmaddhw $f15, $f16, $f17
  625. + pmaxsh $f18, $f19, $f20
  626. + pmaxub $f21, $f22, $f23
  627. + pminsh $f24, $f25, $f26
  628. + pminub $f27, $f28, $f29
  629. + pmovmskb $f0, $f1
  630. + pmulhuh $f2, $f3, $f4
  631. + pmulhh $f5, $f6, $f7
  632. + pmullh $f8, $f9, $f10
  633. + pmuluw $f11, $f12, $f13
  634. + pasubub $f14, $f15, $f16
  635. + biadd $f17, $f18
  636. + pshufh $f19, $f20, $f21
  637. + psllh $f22, $f23, $f24
  638. + psllw $f25, $f26, $f27
  639. + psrah $f28, $f29, $f30
  640. + psraw $f0, $f1, $f2
  641. + psrlh $f3, $f4, $f5
  642. + psrlw $f6, $f7, $f8
  643. + psubb $f9, $f10, $f11
  644. + psubh $f12, $f13, $f14
  645. + psubw $f15, $f16, $f17
  646. + psubd $f18, $f19, $f20
  647. + psubsb $f21, $f22, $f23
  648. + psubsh $f24, $f25, $f26
  649. + psubusb $f27, $f28, $f29
  650. + psubush $f0, $f1, $f2
  651. + punpckhbh $f3, $f4, $f5
  652. + punpckhhw $f6, $f7, $f8
  653. + punpckhwd $f9, $f10, $f11
  654. + punpcklbh $f12, $f13, $f14
  655. + punpcklhw $f15, $f16, $f17
  656. + punpcklwd $f18, $f19, $f20
  657. +
  658. +fixed_point_insns:
  659. + add $f0, $f1, $f2
  660. + addu $f3, $f4, $f5
  661. + dadd $f6, $f7, $f8
  662. + sub $f9, $f10, $f11
  663. + subu $f12, $f13, $f14
  664. + dsub $f15, $f16, $f17
  665. + or $f18, $f19, $f20
  666. + sll $f21, $f22, $f23
  667. + dsll $f24, $f25, $f26
  668. + xor $f27, $f28, $f29
  669. + nor $f0, $f1, $f2
  670. + and $f3, $f4, $f5
  671. + srl $f6, $f7, $f8
  672. + dsrl $f9, $f10, $f11
  673. + sra $f12, $f13, $f14
  674. + dsra $f15, $f16, $f17
  675. + sequ $f18, $f19
  676. + sltu $f20, $f21
  677. + sleu $f22, $f23
  678. + seq $f24, $f25
  679. + slt $f26, $f27
  680. + sle $f28, $f29
  681. diff --git a/gas/testsuite/gas/mips/loongson-2f.d b/gas/testsuite/gas/mips/loongson-2f.d
  682. index 8d1d8f7..4bd8f15 100644
  683. --- a/gas/testsuite/gas/mips/loongson-2f.d
  684. +++ b/gas/testsuite/gas/mips/loongson-2f.d
  685. @@ -39,91 +39,7 @@ Disassembly of section .text:
  686. .*: 7222081b nmsub.d \$f0,\$f1,\$f2
  687. .*: 72c520db nmsub.ps \$f3,\$f4,\$f5
  688.  
  689. -[0-9a-f]+ <simd_insns>:
  690. -.*: 4b420802 packsshb \$f0,\$f1,\$f2
  691. -.*: 4b2520c2 packsswh \$f3,\$f4,\$f5
  692. -.*: 4b683982 packushb \$f6,\$f7,\$f8
  693. -.*: 4bcb5240 paddb \$f9,\$f10,\$f11
  694. -.*: 4b4e6b00 paddh \$f12,\$f13,\$f14
  695. -.*: 4b7183c0 paddw \$f15,\$f16,\$f17
  696. -.*: 4bf49c80 paddd \$f18,\$f19,\$f20
  697. -.*: 4b97b540 paddsb \$f21,\$f22,\$f23
  698. -.*: 4b1ace00 paddsh \$f24,\$f25,\$f26
  699. -.*: 4bbde6c0 paddusb \$f27,\$f28,\$f29
  700. -.*: 4b220800 paddush \$f0,\$f1,\$f2
  701. -.*: 4be520c2 pandn \$f3,\$f4,\$f5
  702. -.*: 4b283988 pavgb \$f6,\$f7,\$f8
  703. -.*: 4b0b5248 pavgh \$f9,\$f10,\$f11
  704. -.*: 4b8e6b09 pcmpeqb \$f12,\$f13,\$f14
  705. -.*: 4b5183c9 pcmpeqh \$f15,\$f16,\$f17
  706. -.*: 4b149c89 pcmpeqw \$f18,\$f19,\$f20
  707. -.*: 4bb7b549 pcmpgtb \$f21,\$f22,\$f23
  708. -.*: 4b7ace09 pcmpgth \$f24,\$f25,\$f26
  709. -.*: 4b3de6c9 pcmpgtw \$f27,\$f28,\$f29
  710. -.*: 4b42080e pextrh \$f0,\$f1,\$f2
  711. -.*: 4b8520c3 pinsrh_0 \$f3,\$f4,\$f5
  712. -.*: 4ba83983 pinsrh_1 \$f6,\$f7,\$f8
  713. -.*: 4bcb5243 pinsrh_2 \$f9,\$f10,\$f11
  714. -.*: 4bee6b03 pinsrh_3 \$f12,\$f13,\$f14
  715. -.*: 4b7183ce pmaddhw \$f15,\$f16,\$f17
  716. -.*: 4b549c88 pmaxsh \$f18,\$f19,\$f20
  717. -.*: 4b97b548 pmaxub \$f21,\$f22,\$f23
  718. -.*: 4b7ace08 pminsh \$f24,\$f25,\$f26
  719. -.*: 4bbde6c8 pminub \$f27,\$f28,\$f29
  720. -.*: 4ba0080f pmovmskb \$f0,\$f1
  721. -.*: 4ba4188a pmulhuh \$f2,\$f3,\$f4
  722. -.*: 4b67314a pmulhh \$f5,\$f6,\$f7
  723. -.*: 4b4a4a0a pmullh \$f8,\$f9,\$f10
  724. -.*: 4b8d62ca pmuluw \$f11,\$f12,\$f13
  725. -.*: 4b307b8d pasubub \$f14,\$f15,\$f16
  726. -.*: 4b80944f biadd \$f17,\$f18
  727. -.*: 4b15a4c2 pshufh \$f19,\$f20,\$f21
  728. -.*: 4b38bd8a psllh \$f22,\$f23,\$f24
  729. -.*: 4b1bd64a psllw \$f25,\$f26,\$f27
  730. -.*: 4b7eef0b psrah \$f28,\$f29,\$f30
  731. -.*: 4b42080b psraw \$f0,\$f1,\$f2
  732. -.*: 4b2520cb psrlh \$f3,\$f4,\$f5
  733. -.*: 4b08398b psrlw \$f6,\$f7,\$f8
  734. -.*: 4bcb5241 psubb \$f9,\$f10,\$f11
  735. -.*: 4b4e6b01 psubh \$f12,\$f13,\$f14
  736. -.*: 4b7183c1 psubw \$f15,\$f16,\$f17
  737. -.*: 4bf49c81 psubd \$f18,\$f19,\$f20
  738. -.*: 4b97b541 psubsb \$f21,\$f22,\$f23
  739. -.*: 4b1ace01 psubsh \$f24,\$f25,\$f26
  740. -.*: 4bbde6c1 psubusb \$f27,\$f28,\$f29
  741. -.*: 4b220801 psubush \$f0,\$f1,\$f2
  742. -.*: 4b6520c3 punpckhbh \$f3,\$f4,\$f5
  743. -.*: 4b283983 punpckhhw \$f6,\$f7,\$f8
  744. -.*: 4bab524b punpckhwd \$f9,\$f10,\$f11
  745. -.*: 4b4e6b03 punpcklbh \$f12,\$f13,\$f14
  746. -.*: 4b1183c3 punpcklhw \$f15,\$f16,\$f17
  747. -.*: 4b949c8b punpcklwd \$f18,\$f19,\$f20
  748. -
  749. -[0-9a-f]+ <fixed_point_insns>:
  750. -.*: 4b42080c add \$f0,\$f1,\$f2
  751. -.*: 4b0520cc addu \$f3,\$f4,\$f5
  752. -.*: 4b68398c dadd \$f6,\$f7,\$f8
  753. -.*: 4b4b524d sub \$f9,\$f10,\$f11
  754. -.*: 4b0e6b0d subu \$f12,\$f13,\$f14
  755. -.*: 4b7183cd dsub \$f15,\$f16,\$f17
  756. -.*: 4b349c8c or \$f18,\$f19,\$f20
  757. -.*: 4b17b54e sll \$f21,\$f22,\$f23
  758. -.*: 4b3ace0e dsll \$f24,\$f25,\$f26
  759. -.*: 4b9de6c2 xor \$f27,\$f28,\$f29
  760. -.*: 4ba20802 nor \$f0,\$f1,\$f2
  761. -.*: 4bc520c2 and \$f3,\$f4,\$f5
  762. -.*: 4b08398f srl \$f6,\$f7,\$f8
  763. -.*: 4b2b524f dsrl \$f9,\$f10,\$f11
  764. -.*: 4b4e6b0f sra \$f12,\$f13,\$f14
  765. -.*: 4b7183cf dsra \$f15,\$f16,\$f17
  766. -.*: 4b93900c sequ \$f18,\$f19
  767. -.*: 4b95a00d sltu \$f20,\$f21
  768. -.*: 4b97b00e sleu \$f22,\$f23
  769. -.*: 4bb9c00c seq \$f24,\$f25
  770. -.*: 4bbbd00d slt \$f26,\$f27
  771. -.*: 4bbde00e sle \$f28,\$f29
  772. -
  773. -000001ac <mips5_ps_insns>:
  774. +[0-9a-f]+ <mips5_ps_insns>:
  775. .*: 46c01005 abs.ps \$f0,\$f2
  776. .*: 46c62080 add.ps \$f2,\$f4,\$f6
  777. .*: 46ca4032 c.eq.ps \$f8,\$f10
  778. diff --git a/gas/testsuite/gas/mips/loongson-2f.s b/gas/testsuite/gas/mips/loongson-2f.s
  779. index 4b47a99..412b139 100644
  780. --- a/gas/testsuite/gas/mips/loongson-2f.s
  781. +++ b/gas/testsuite/gas/mips/loongson-2f.s
  782. @@ -34,90 +34,6 @@ fpu_insns:
  783. nmsub.d $f0, $f1, $f2
  784. nmsub.ps $f3, $f4, $f5
  785.  
  786. -simd_insns:
  787. - packsshb $f0, $f1, $f2
  788. - packsswh $f3, $f4, $f5
  789. - packushb $f6, $f7, $f8
  790. - paddb $f9, $f10, $f11
  791. - paddh $f12, $f13, $f14
  792. - paddw $f15, $f16, $f17
  793. - paddd $f18, $f19, $f20
  794. - paddsb $f21, $f22, $f23
  795. - paddsh $f24, $f25, $f26
  796. - paddusb $f27, $f28, $f29
  797. - paddush $f0, $f1, $f2
  798. - pandn $f3, $f4, $f5
  799. - pavgb $f6, $f7, $f8
  800. - pavgh $f9, $f10, $f11
  801. - pcmpeqb $f12, $f13, $f14
  802. - pcmpeqh $f15, $f16, $f17
  803. - pcmpeqw $f18, $f19, $f20
  804. - pcmpgtb $f21, $f22, $f23
  805. - pcmpgth $f24, $f25, $f26
  806. - pcmpgtw $f27, $f28, $f29
  807. - pextrh $f0, $f1, $f2
  808. - pinsrh_0 $f3, $f4, $f5
  809. - pinsrh_1 $f6, $f7, $f8
  810. - pinsrh_2 $f9, $f10, $f11
  811. - pinsrh_3 $f12, $f13, $f14
  812. - pmaddhw $f15, $f16, $f17
  813. - pmaxsh $f18, $f19, $f20
  814. - pmaxub $f21, $f22, $f23
  815. - pminsh $f24, $f25, $f26
  816. - pminub $f27, $f28, $f29
  817. - pmovmskb $f0, $f1
  818. - pmulhuh $f2, $f3, $f4
  819. - pmulhh $f5, $f6, $f7
  820. - pmullh $f8, $f9, $f10
  821. - pmuluw $f11, $f12, $f13
  822. - pasubub $f14, $f15, $f16
  823. - biadd $f17, $f18
  824. - pshufh $f19, $f20, $f21
  825. - psllh $f22, $f23, $f24
  826. - psllw $f25, $f26, $f27
  827. - psrah $f28, $f29, $f30
  828. - psraw $f0, $f1, $f2
  829. - psrlh $f3, $f4, $f5
  830. - psrlw $f6, $f7, $f8
  831. - psubb $f9, $f10, $f11
  832. - psubh $f12, $f13, $f14
  833. - psubw $f15, $f16, $f17
  834. - psubd $f18, $f19, $f20
  835. - psubsb $f21, $f22, $f23
  836. - psubsh $f24, $f25, $f26
  837. - psubusb $f27, $f28, $f29
  838. - psubush $f0, $f1, $f2
  839. - punpckhbh $f3, $f4, $f5
  840. - punpckhhw $f6, $f7, $f8
  841. - punpckhwd $f9, $f10, $f11
  842. - punpcklbh $f12, $f13, $f14
  843. - punpcklhw $f15, $f16, $f17
  844. - punpcklwd $f18, $f19, $f20
  845. -
  846. -fixed_point_insns:
  847. - add $f0, $f1, $f2
  848. - addu $f3, $f4, $f5
  849. - dadd $f6, $f7, $f8
  850. - sub $f9, $f10, $f11
  851. - subu $f12, $f13, $f14
  852. - dsub $f15, $f16, $f17
  853. - or $f18, $f19, $f20
  854. - sll $f21, $f22, $f23
  855. - dsll $f24, $f25, $f26
  856. - xor $f27, $f28, $f29
  857. - nor $f0, $f1, $f2
  858. - and $f3, $f4, $f5
  859. - srl $f6, $f7, $f8
  860. - dsrl $f9, $f10, $f11
  861. - sra $f12, $f13, $f14
  862. - dsra $f15, $f16, $f17
  863. - sequ $f18, $f19
  864. - sltu $f20, $f21
  865. - sleu $f22, $f23
  866. - seq $f24, $f25
  867. - slt $f26, $f27
  868. - sle $f28, $f29
  869. -
  870. mips5_ps_insns:
  871. abs.ps $f0, $f2
  872. add.ps $f2, $f4, $f6
  873. diff --git a/gas/testsuite/gas/mips/loongson-3a-2.d b/gas/testsuite/gas/mips/loongson-3a-2.d
  874. index 32fea2e..e80b98b 100644
  875. --- a/gas/testsuite/gas/mips/loongson-3a-2.d
  876. +++ b/gas/testsuite/gas/mips/loongson-3a-2.d
  877. @@ -7,10 +7,6 @@
  878. Disassembly of section .text:
  879.  
  880. [0-9a-f]+ <.text>:
  881. -.*: 70601075 campi \$2,\$3
  882. -.*: 70a02035 campv \$4,\$5
  883. -.*: 70e830b5 camwi \$6,\$7,\$8
  884. -.*: 714048f5 ramri \$9,\$10
  885. .*: 716c0026 gsle \$11,\$12
  886. .*: 71ae0027 gsgt \$13,\$14
  887. .*: c8622010 gslble \$2,\$3,\$4
  888. diff --git a/gas/testsuite/gas/mips/loongson-3a-mmi.d b/gas/testsuite/gas/mips/loongson-3a-mmi.d
  889. new file mode 100644
  890. index 0000000..3a52c5a
  891. --- /dev/null
  892. +++ b/gas/testsuite/gas/mips/loongson-3a-mmi.d
  893. @@ -0,0 +1,108 @@
  894. +#as: -march=loongson3a -mabi=o64
  895. +#objdump: -M reg-names=numeric -dp
  896. +#name: Loongson-3A MMI tests
  897. +
  898. +.*: file format .*
  899. +
  900. +private flags = .*
  901. +
  902. +MIPS ABI Flags Version: 0
  903. +ISA: .*
  904. +GPR size: .*
  905. +CPR1 size: .*
  906. +CPR2 size: .*
  907. +FP ABI: .*
  908. +ISA Extension: None
  909. +ASEs:
  910. + Loongson MMI ASE
  911. + Loongson CAM ASE
  912. + Loongson EXT ASE
  913. +FLAGS 1: .*
  914. +FLAGS 2: .*
  915. +
  916. +Disassembly of section .text:
  917. +
  918. +[0-9a-f]+ <simd_insns>:
  919. +.*: 4b420802 packsshb \$f0,\$f1,\$f2
  920. +.*: 4b2520c2 packsswh \$f3,\$f4,\$f5
  921. +.*: 4b683982 packushb \$f6,\$f7,\$f8
  922. +.*: 4bcb5240 paddb \$f9,\$f10,\$f11
  923. +.*: 4b4e6b00 paddh \$f12,\$f13,\$f14
  924. +.*: 4b7183c0 paddw \$f15,\$f16,\$f17
  925. +.*: 4bf49c80 paddd \$f18,\$f19,\$f20
  926. +.*: 4b97b540 paddsb \$f21,\$f22,\$f23
  927. +.*: 4b1ace00 paddsh \$f24,\$f25,\$f26
  928. +.*: 4bbde6c0 paddusb \$f27,\$f28,\$f29
  929. +.*: 4b220800 paddush \$f0,\$f1,\$f2
  930. +.*: 4be520c2 pandn \$f3,\$f4,\$f5
  931. +.*: 4b283988 pavgb \$f6,\$f7,\$f8
  932. +.*: 4b0b5248 pavgh \$f9,\$f10,\$f11
  933. +.*: 4b8e6b09 pcmpeqb \$f12,\$f13,\$f14
  934. +.*: 4b5183c9 pcmpeqh \$f15,\$f16,\$f17
  935. +.*: 4b149c89 pcmpeqw \$f18,\$f19,\$f20
  936. +.*: 4bb7b549 pcmpgtb \$f21,\$f22,\$f23
  937. +.*: 4b7ace09 pcmpgth \$f24,\$f25,\$f26
  938. +.*: 4b3de6c9 pcmpgtw \$f27,\$f28,\$f29
  939. +.*: 4b42080e pextrh \$f0,\$f1,\$f2
  940. +.*: 4b8520c3 pinsrh_0 \$f3,\$f4,\$f5
  941. +.*: 4ba83983 pinsrh_1 \$f6,\$f7,\$f8
  942. +.*: 4bcb5243 pinsrh_2 \$f9,\$f10,\$f11
  943. +.*: 4bee6b03 pinsrh_3 \$f12,\$f13,\$f14
  944. +.*: 4b7183ce pmaddhw \$f15,\$f16,\$f17
  945. +.*: 4b549c88 pmaxsh \$f18,\$f19,\$f20
  946. +.*: 4b97b548 pmaxub \$f21,\$f22,\$f23
  947. +.*: 4b7ace08 pminsh \$f24,\$f25,\$f26
  948. +.*: 4bbde6c8 pminub \$f27,\$f28,\$f29
  949. +.*: 4ba0080f pmovmskb \$f0,\$f1
  950. +.*: 4ba4188a pmulhuh \$f2,\$f3,\$f4
  951. +.*: 4b67314a pmulhh \$f5,\$f6,\$f7
  952. +.*: 4b4a4a0a pmullh \$f8,\$f9,\$f10
  953. +.*: 4b8d62ca pmuluw \$f11,\$f12,\$f13
  954. +.*: 4b307b8d pasubub \$f14,\$f15,\$f16
  955. +.*: 4b80944f biadd \$f17,\$f18
  956. +.*: 4b15a4c2 pshufh \$f19,\$f20,\$f21
  957. +.*: 4b38bd8a psllh \$f22,\$f23,\$f24
  958. +.*: 4b1bd64a psllw \$f25,\$f26,\$f27
  959. +.*: 4b7eef0b psrah \$f28,\$f29,\$f30
  960. +.*: 4b42080b psraw \$f0,\$f1,\$f2
  961. +.*: 4b2520cb psrlh \$f3,\$f4,\$f5
  962. +.*: 4b08398b psrlw \$f6,\$f7,\$f8
  963. +.*: 4bcb5241 psubb \$f9,\$f10,\$f11
  964. +.*: 4b4e6b01 psubh \$f12,\$f13,\$f14
  965. +.*: 4b7183c1 psubw \$f15,\$f16,\$f17
  966. +.*: 4bf49c81 psubd \$f18,\$f19,\$f20
  967. +.*: 4b97b541 psubsb \$f21,\$f22,\$f23
  968. +.*: 4b1ace01 psubsh \$f24,\$f25,\$f26
  969. +.*: 4bbde6c1 psubusb \$f27,\$f28,\$f29
  970. +.*: 4b220801 psubush \$f0,\$f1,\$f2
  971. +.*: 4b6520c3 punpckhbh \$f3,\$f4,\$f5
  972. +.*: 4b283983 punpckhhw \$f6,\$f7,\$f8
  973. +.*: 4bab524b punpckhwd \$f9,\$f10,\$f11
  974. +.*: 4b4e6b03 punpcklbh \$f12,\$f13,\$f14
  975. +.*: 4b1183c3 punpcklhw \$f15,\$f16,\$f17
  976. +.*: 4b949c8b punpcklwd \$f18,\$f19,\$f20
  977. +
  978. +[0-9a-f]+ <fixed_point_insns>:
  979. +.*: 4b42080c add \$f0,\$f1,\$f2
  980. +.*: 4b0520cc addu \$f3,\$f4,\$f5
  981. +.*: 4b68398c dadd \$f6,\$f7,\$f8
  982. +.*: 4b4b524d sub \$f9,\$f10,\$f11
  983. +.*: 4b0e6b0d subu \$f12,\$f13,\$f14
  984. +.*: 4b7183cd dsub \$f15,\$f16,\$f17
  985. +.*: 4b349c8c or \$f18,\$f19,\$f20
  986. +.*: 4b17b54e sll \$f21,\$f22,\$f23
  987. +.*: 4b3ace0e dsll \$f24,\$f25,\$f26
  988. +.*: 4b9de6c2 xor \$f27,\$f28,\$f29
  989. +.*: 4ba20802 nor \$f0,\$f1,\$f2
  990. +.*: 4bc520c2 and \$f3,\$f4,\$f5
  991. +.*: 4b08398f srl \$f6,\$f7,\$f8
  992. +.*: 4b2b524f dsrl \$f9,\$f10,\$f11
  993. +.*: 4b4e6b0f sra \$f12,\$f13,\$f14
  994. +.*: 4b7183cf dsra \$f15,\$f16,\$f17
  995. +.*: 4b93900c sequ \$f18,\$f19
  996. +.*: 4b95a00d sltu \$f20,\$f21
  997. +.*: 4b97b00e sleu \$f22,\$f23
  998. +.*: 4bb9c00c seq \$f24,\$f25
  999. +.*: 4bbbd00d slt \$f26,\$f27
  1000. +.*: 4bbde00e sle \$f28,\$f29
  1001. +#pass
  1002. diff --git a/gas/testsuite/gas/mips/loongson-3a-mmi.s b/gas/testsuite/gas/mips/loongson-3a-mmi.s
  1003. new file mode 100644
  1004. index 0000000..e87d66e
  1005. --- /dev/null
  1006. +++ b/gas/testsuite/gas/mips/loongson-3a-mmi.s
  1007. @@ -0,0 +1,86 @@
  1008. + .text
  1009. + .set noreorder
  1010. +
  1011. +simd_insns:
  1012. + packsshb $f0, $f1, $f2
  1013. + packsswh $f3, $f4, $f5
  1014. + packushb $f6, $f7, $f8
  1015. + paddb $f9, $f10, $f11
  1016. + paddh $f12, $f13, $f14
  1017. + paddw $f15, $f16, $f17
  1018. + paddd $f18, $f19, $f20
  1019. + paddsb $f21, $f22, $f23
  1020. + paddsh $f24, $f25, $f26
  1021. + paddusb $f27, $f28, $f29
  1022. + paddush $f0, $f1, $f2
  1023. + pandn $f3, $f4, $f5
  1024. + pavgb $f6, $f7, $f8
  1025. + pavgh $f9, $f10, $f11
  1026. + pcmpeqb $f12, $f13, $f14
  1027. + pcmpeqh $f15, $f16, $f17
  1028. + pcmpeqw $f18, $f19, $f20
  1029. + pcmpgtb $f21, $f22, $f23
  1030. + pcmpgth $f24, $f25, $f26
  1031. + pcmpgtw $f27, $f28, $f29
  1032. + pextrh $f0, $f1, $f2
  1033. + pinsrh_0 $f3, $f4, $f5
  1034. + pinsrh_1 $f6, $f7, $f8
  1035. + pinsrh_2 $f9, $f10, $f11
  1036. + pinsrh_3 $f12, $f13, $f14
  1037. + pmaddhw $f15, $f16, $f17
  1038. + pmaxsh $f18, $f19, $f20
  1039. + pmaxub $f21, $f22, $f23
  1040. + pminsh $f24, $f25, $f26
  1041. + pminub $f27, $f28, $f29
  1042. + pmovmskb $f0, $f1
  1043. + pmulhuh $f2, $f3, $f4
  1044. + pmulhh $f5, $f6, $f7
  1045. + pmullh $f8, $f9, $f10
  1046. + pmuluw $f11, $f12, $f13
  1047. + pasubub $f14, $f15, $f16
  1048. + biadd $f17, $f18
  1049. + pshufh $f19, $f20, $f21
  1050. + psllh $f22, $f23, $f24
  1051. + psllw $f25, $f26, $f27
  1052. + psrah $f28, $f29, $f30
  1053. + psraw $f0, $f1, $f2
  1054. + psrlh $f3, $f4, $f5
  1055. + psrlw $f6, $f7, $f8
  1056. + psubb $f9, $f10, $f11
  1057. + psubh $f12, $f13, $f14
  1058. + psubw $f15, $f16, $f17
  1059. + psubd $f18, $f19, $f20
  1060. + psubsb $f21, $f22, $f23
  1061. + psubsh $f24, $f25, $f26
  1062. + psubusb $f27, $f28, $f29
  1063. + psubush $f0, $f1, $f2
  1064. + punpckhbh $f3, $f4, $f5
  1065. + punpckhhw $f6, $f7, $f8
  1066. + punpckhwd $f9, $f10, $f11
  1067. + punpcklbh $f12, $f13, $f14
  1068. + punpcklhw $f15, $f16, $f17
  1069. + punpcklwd $f18, $f19, $f20
  1070. +
  1071. +fixed_point_insns:
  1072. + add $f0, $f1, $f2
  1073. + addu $f3, $f4, $f5
  1074. + dadd $f6, $f7, $f8
  1075. + sub $f9, $f10, $f11
  1076. + subu $f12, $f13, $f14
  1077. + dsub $f15, $f16, $f17
  1078. + or $f18, $f19, $f20
  1079. + sll $f21, $f22, $f23
  1080. + dsll $f24, $f25, $f26
  1081. + xor $f27, $f28, $f29
  1082. + nor $f0, $f1, $f2
  1083. + and $f3, $f4, $f5
  1084. + srl $f6, $f7, $f8
  1085. + dsrl $f9, $f10, $f11
  1086. + sra $f12, $f13, $f14
  1087. + dsra $f15, $f16, $f17
  1088. + sequ $f18, $f19
  1089. + sltu $f20, $f21
  1090. + sleu $f22, $f23
  1091. + seq $f24, $f25
  1092. + slt $f26, $f27
  1093. + sle $f28, $f29
  1094. diff --git a/gas/testsuite/gas/mips/loongson-cam.d b/gas/testsuite/gas/mips/loongson-cam.d
  1095. new file mode 100644
  1096. index 0000000..ae973ea
  1097. --- /dev/null
  1098. +++ b/gas/testsuite/gas/mips/loongson-cam.d
  1099. @@ -0,0 +1,27 @@
  1100. +#as: -mloongson-cam -mabi=64
  1101. +#objdump: -M reg-names=numeric -M loongson-cam -dp
  1102. +#name: Loongson CAM tests
  1103. +
  1104. +.*: file format .*
  1105. +
  1106. +private flags = .*
  1107. +
  1108. +MIPS ABI Flags Version: 0
  1109. +ISA: .*
  1110. +GPR size: .*
  1111. +CPR1 size: .*
  1112. +CPR2 size: .*
  1113. +FP ABI: .*
  1114. +ISA Extension: None
  1115. +ASEs:
  1116. + Loongson CAM ASE
  1117. +FLAGS 1: .*
  1118. +FLAGS 2: .*
  1119. +
  1120. +Disassembly of section .text:
  1121. +
  1122. +[0-9a-f]+ <.text>:
  1123. +.*: 70601075 campi \$2,\$3
  1124. +.*: 70a02035 campv \$4,\$5
  1125. +.*: 70e830b5 camwi \$6,\$7,\$8
  1126. +.*: 714048f5 ramri \$9,\$10
  1127. diff --git a/gas/testsuite/gas/mips/loongson-cam.s b/gas/testsuite/gas/mips/loongson-cam.s
  1128. new file mode 100644
  1129. index 0000000..688e9d4
  1130. --- /dev/null
  1131. +++ b/gas/testsuite/gas/mips/loongson-cam.s
  1132. @@ -0,0 +1,7 @@
  1133. + .text
  1134. + .set noreorder
  1135. +
  1136. + campi $2,$3
  1137. + campv $4,$5
  1138. + camwi $6,$7,$8
  1139. + ramri $9,$10
  1140. diff --git a/gas/testsuite/gas/mips/loongson-ext2.d b/gas/testsuite/gas/mips/loongson-ext2.d
  1141. new file mode 100644
  1142. index 0000000..d821386
  1143. --- /dev/null
  1144. +++ b/gas/testsuite/gas/mips/loongson-ext2.d
  1145. @@ -0,0 +1,28 @@
  1146. +#as: -mloongson-ext2 -mabi=64
  1147. +#objdump: -M reg-names=numeric -M loongson-ext2 -dp
  1148. +#name: Loongson EXT2 tests
  1149. +
  1150. +.*: file format .*
  1151. +
  1152. +private flags = .*
  1153. +
  1154. +MIPS ABI Flags Version: 0
  1155. +ISA: .*
  1156. +GPR size: .*
  1157. +CPR1 size: .*
  1158. +CPR2 size: .*
  1159. +FP ABI: .*
  1160. +ISA Extension: None
  1161. +ASEs:
  1162. + Loongson EXT ASE
  1163. + Loongson EXT2 ASE
  1164. +FLAGS 1: .*
  1165. +FLAGS 2: .*
  1166. +
  1167. +Disassembly of section .text:
  1168. +
  1169. +[0-9a-f]+ <.text>:
  1170. +.*: 70801062 cto \$2,\$4
  1171. +.*: 70801022 ctz \$2,\$4
  1172. +.*: 708010e2 dcto \$2,\$4
  1173. +.*: 708010a2 dctz \$2,\$4
  1174. diff --git a/gas/testsuite/gas/mips/loongson-ext2.s b/gas/testsuite/gas/mips/loongson-ext2.s
  1175. new file mode 100644
  1176. index 0000000..023a469
  1177. --- /dev/null
  1178. +++ b/gas/testsuite/gas/mips/loongson-ext2.s
  1179. @@ -0,0 +1,7 @@
  1180. + .text
  1181. + .set noreorder
  1182. +
  1183. + cto $2,$4
  1184. + ctz $2,$4
  1185. + dcto $2,$4
  1186. + dctz $2,$4
  1187. diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
  1188. index 74c39d4..895c2b9 100644
  1189. --- a/gas/testsuite/gas/mips/mips.exp
  1190. +++ b/gas/testsuite/gas/mips/mips.exp
  1191. @@ -1385,6 +1385,12 @@ if { [istarget mips*-*-vxworks*] } {
  1192. run_dump_test "loongson-3a-2"
  1193. run_dump_test "loongson-3a-3"
  1194.  
  1195. + run_dump_test "loongson-2f-mmi"
  1196. + run_dump_test "loongson-3a-mmi"
  1197. +
  1198. + run_dump_test_arches "loongson-cam" [mips_arch_list_matching gs464]
  1199. + run_dump_test_arches "loongson-ext2" [mips_arch_list_matching gs464]
  1200. +
  1201. if { $has_newabi } {
  1202. run_dump_test_arches "octeon" [mips_arch_list_matching octeon]
  1203. }
  1204. diff --git a/gold/mips.cc b/gold/mips.cc
  1205. index 543a234..5795bd9 100644
  1206. --- a/gold/mips.cc
  1207. +++ b/gold/mips.cc
  1208. @@ -3984,7 +3984,9 @@ class Target_mips : public Sized_target<size, big_endian>
  1209. mach_mips5 = 5,
  1210. mach_mips_loongson_2e = 3001,
  1211. mach_mips_loongson_2f = 3002,
  1212. - mach_mips_loongson_3a = 3003,
  1213. + mach_mips_gs464 = 3003,
  1214. + mach_mips_gs464e = 3004,
  1215. + mach_mips_gs264e = 3005,
  1216. mach_mips_sb1 = 12310201, // octal 'SB', 01
  1217. mach_mips_octeon = 6501,
  1218. mach_mips_octeonp = 6601,
  1219. @@ -4150,7 +4152,9 @@ class Target_mips : public Sized_target<size, big_endian>
  1220. this->add_extension(mach_mips_octeon2, mach_mips_octeonp);
  1221. this->add_extension(mach_mips_octeonp, mach_mips_octeon);
  1222. this->add_extension(mach_mips_octeon, mach_mipsisa64r2);
  1223. - this->add_extension(mach_mips_loongson_3a, mach_mipsisa64r2);
  1224. + this->add_extension(mach_mips_gs264e, mach_mips_gs464e);
  1225. + this->add_extension(mach_mips_gs464e, mach_mips_gs464);
  1226. + this->add_extension(mach_mips_gs464, mach_mipsisa64r2);
  1227.  
  1228. // MIPS64 extensions.
  1229. this->add_extension(mach_mipsisa64r2, mach_mipsisa64);
  1230. @@ -8884,8 +8888,14 @@ Target_mips<size, big_endian>::elf_mips_mach(elfcpp::Elf_Word flags)
  1231. case elfcpp::E_MIPS_MACH_LS2F:
  1232. return mach_mips_loongson_2f;
  1233.  
  1234. - case elfcpp::E_MIPS_MACH_LS3A:
  1235. - return mach_mips_loongson_3a;
  1236. + case elfcpp::E_MIPS_MACH_GS464:
  1237. + return mach_mips_gs464;
  1238. +
  1239. + case elfcpp::E_MIPS_MACH_GS464E:
  1240. + return mach_mips_gs464e;
  1241. +
  1242. + case elfcpp::E_MIPS_MACH_GS264E:
  1243. + return mach_mips_gs264e;
  1244.  
  1245. case elfcpp::E_MIPS_MACH_OCTEON3:
  1246. return mach_mips_octeon3;
  1247. @@ -8985,9 +8995,6 @@ Target_mips<size, big_endian>::mips_isa_ext_mach(unsigned int isa_ext)
  1248. case elfcpp::AFL_EXT_LOONGSON_2F:
  1249. return mach_mips_loongson_2f;
  1250.  
  1251. - case elfcpp::AFL_EXT_LOONGSON_3A:
  1252. - return mach_mips_loongson_3a;
  1253. -
  1254. case elfcpp::AFL_EXT_SB1:
  1255. return mach_mips_sb1;
  1256.  
  1257. @@ -9052,9 +9059,6 @@ Target_mips<size, big_endian>::mips_isa_ext(unsigned int mips_mach)
  1258. case mach_mips_loongson_2f:
  1259. return elfcpp::AFL_EXT_LOONGSON_2F;
  1260.  
  1261. - case mach_mips_loongson_3a:
  1262. - return elfcpp::AFL_EXT_LOONGSON_3A;
  1263. -
  1264. case mach_mips_sb1:
  1265. return elfcpp::AFL_EXT_SB1;
  1266.  
  1267. @@ -9186,7 +9190,7 @@ Target_mips<size, big_endian>::infer_abiflags(
  1268. && abiflags->fp_abi != elfcpp::Val_GNU_MIPS_ABI_FP_SOFT
  1269. && abiflags->fp_abi != elfcpp::Val_GNU_MIPS_ABI_FP_64A
  1270. && abiflags->isa_level >= 32
  1271. - && abiflags->isa_ext != elfcpp::AFL_EXT_LOONGSON_3A)
  1272. + && abiflags->ases != elfcpp::AFL_ASE_LOONGSON_EXT)
  1273. abiflags->flags1 |= elfcpp::AFL_FLAGS1_ODDSPREG;
  1274. }
  1275.  
  1276. @@ -12556,8 +12560,12 @@ Target_mips<size, big_endian>::elf_mips_mach_name(elfcpp::Elf_Word e_flags)
  1277. return "mips:loongson_2e";
  1278. case elfcpp::E_MIPS_MACH_LS2F:
  1279. return "mips:loongson_2f";
  1280. - case elfcpp::E_MIPS_MACH_LS3A:
  1281. - return "mips:loongson_3a";
  1282. + case elfcpp::E_MIPS_MACH_GS464:
  1283. + return "mips:gs464";
  1284. + case elfcpp::E_MIPS_MACH_GS464E:
  1285. + return "mips:gs464e";
  1286. + case elfcpp::E_MIPS_MACH_GS264E:
  1287. + return "mips:gs264e";
  1288. case elfcpp::E_MIPS_MACH_OCTEON:
  1289. return "mips:octeon";
  1290. case elfcpp::E_MIPS_MACH_OCTEON2:
  1291. diff --git a/include/elf/mips.h b/include/elf/mips.h
  1292. index 9de0b4e..fd02955 100644
  1293. --- a/include/elf/mips.h
  1294. +++ b/include/elf/mips.h
  1295. @@ -299,7 +299,9 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
  1296. #define E_MIPS_MACH_9000 0x00990000
  1297. #define E_MIPS_MACH_LS2E 0x00A00000
  1298. #define E_MIPS_MACH_LS2F 0x00A10000
  1299. -#define E_MIPS_MACH_LS3A 0x00A20000
  1300. +#define E_MIPS_MACH_GS464 0x00A20000
  1301. +#define E_MIPS_MACH_GS464E 0x00A30000
  1302. +#define E_MIPS_MACH_GS264E 0x00A40000
  1303. /* Processor specific section indices. These sections do not actually
  1304. exist. Symbols with a st_shndx field corresponding to one of these
  1305. @@ -1235,14 +1237,17 @@ extern void bfd_mips_elf_swap_abiflags_v0_out
  1306. #define AFL_ASE_XPA 0x00001000 /* XPA ASE. */
  1307. #define AFL_ASE_DSPR3 0x00002000 /* DSP R3 ASE. */
  1308. #define AFL_ASE_MIPS16E2 0x00004000 /* MIPS16e2 ASE. */
  1309. -#define AFL_ASE_MASK 0x00007fff /* All ASEs. */
  1310. +#define AFL_ASE_LOONGSON_MMI 0x00040000 /* Loongson MMI ASE. */
  1311. +#define AFL_ASE_LOONGSON_CAM 0x00080000 /* Loongson CAM ASE. */
  1312. +#define AFL_ASE_LOONGSON_EXT 0x00100000 /* Loongson EXT instructions. */
  1313. +#define AFL_ASE_LOONGSON_EXT2 0x00200000 /* Loongson EXT2 instructions. */
  1314. +#define AFL_ASE_MASK 0x003effff /* All ASEs. */
  1315.  
  1316. /* Values for the isa_ext word of an ABI flags structure. */
  1317.  
  1318. #define AFL_EXT_XLR 1 /* RMI Xlr instruction. */
  1319. #define AFL_EXT_OCTEON2 2 /* Cavium Networks Octeon2. */
  1320. #define AFL_EXT_OCTEONP 3 /* Cavium Networks OcteonP. */
  1321. -#define AFL_EXT_LOONGSON_3A 4 /* Loongson 3A. */
  1322. #define AFL_EXT_OCTEON 5 /* Cavium Networks Octeon. */
  1323. #define AFL_EXT_5900 6 /* MIPS R5900 instruction. */
  1324. #define AFL_EXT_4650 7 /* MIPS R4650 instruction. */
  1325. diff --git a/include/opcode/mips.h b/include/opcode/mips.h
  1326. index a8036ab..2a32c1e 100644
  1327. --- a/include/opcode/mips.h
  1328. +++ b/include/opcode/mips.h
  1329. @@ -928,7 +928,7 @@ mips_opcode_32bit_p (const struct mips_opcode *mo)
  1330. "+S" Length-minus-one field of cins/exts. Requires msb position
  1331. of the field to be <= 63.
  1332.  
  1333. - Loongson-3A:
  1334. + Loongson-ext ASE:
  1335. "+a" 8-bit signed offset in bit 6 (OP_*_OFFSET_A)
  1336. "+b" 8-bit signed offset in bit 3 (OP_*_OFFSET_B)
  1337. "+c" 9-bit signed offset in bit 6 (OP_*_OFFSET_C)
  1338. @@ -1256,8 +1256,6 @@ static const unsigned int mips_isa_table[] = {
  1339. #define INSN_LOONGSON_2E 0x40000000
  1340. /* ST Microelectronics Loongson 2F. */
  1341. #define INSN_LOONGSON_2F 0x80000000
  1342. -/* Loongson 3A. */
  1343. -#define INSN_LOONGSON_3A 0x00000400
  1344. /* RMI Xlr instruction */
  1345. #define INSN_XLR 0x00000020
  1346. /* Imagination interAptiv MR2. */
  1347. @@ -1297,6 +1295,14 @@ static const unsigned int mips_isa_table[] = {
  1348. /* The Virtualization ASE has eXtended Physical Addressing (XPA)
  1349. instructions which are only valid when both ASEs are enabled. */
  1350. #define ASE_XPA_VIRT 0x00020000
  1351. +/* Loongson MultiMedia extensions Instructions (MMI). */
  1352. +#define ASE_LOONGSON_MMI 0x00200000
  1353. +/* Loongson Content Address Memory (CAM). */
  1354. +#define ASE_LOONGSON_CAM 0x00400000
  1355. +/* Loongson EXTensions (EXT) instructions. */
  1356. +#define ASE_LOONGSON_EXT 0x00800000
  1357. +/* Loongson EXTensions R2 (EXT2) instructions. */
  1358. +#define ASE_LOONGSON_EXT2 0x01000000
  1359.  
  1360. /* MIPS ISA defines, use instead of hardcoding ISA level. */
  1361.  
  1362. @@ -1361,7 +1367,9 @@ static const unsigned int mips_isa_table[] = {
  1363. #define CPU_SB1 12310201 /* octal 'SB', 01. */
  1364. #define CPU_LOONGSON_2E 3001
  1365. #define CPU_LOONGSON_2F 3002
  1366. -#define CPU_LOONGSON_3A 3003
  1367. +#define CPU_GS464 3003
  1368. +#define CPU_GS464E 3004
  1369. +#define CPU_GS264E 3005
  1370. #define CPU_OCTEON 6501
  1371. #define CPU_OCTEONP 6601
  1372. #define CPU_OCTEON2 6502
  1373. @@ -1420,9 +1428,6 @@ cpu_is_member (int cpu, unsigned int mask)
  1374. case CPU_LOONGSON_2F:
  1375. return (mask & INSN_LOONGSON_2F) != 0;
  1376.  
  1377. - case CPU_LOONGSON_3A:
  1378. - return (mask & INSN_LOONGSON_3A) != 0;
  1379. -
  1380. case CPU_OCTEON:
  1381. return (mask & INSN_OCTEON) != 0;
  1382.  
  1383. diff --git a/ld/testsuite/ld-mips-elf/mips-elf-flags.exp b/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
  1384. index 654f8ae..b35d13a0 100644
  1385. --- a/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
  1386. +++ b/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
  1387. @@ -197,7 +197,7 @@ isa_conflict { "-march=sb1 -32" "-mips64r2 -32" } sb1 isa64r2
  1388. isa_conflict { "-march=vr4100 -32" "-march=r10000 -32" } 4100 8000
  1389. isa_conflict { "-march=r5900 -32" "-march=vr4111 -32" } 5900 4111
  1390. isa_conflict { "-march=loongson2e -32" "-march=loongson2f -32" } loongson_2e loongson_2f
  1391. -isa_conflict { "-march=loongson3a -32" "-march=loongson2f -32" } loongson_3a loongson_2f
  1392. +isa_conflict { "-march=gs464 -32" "-march=loongson2f -32" } gs464 loongson_2f
  1393.  
  1394. isa_conflict { "-march=interaptiv-mr2 -32" \
  1395. "-march=r4010 -32" } interaptiv-mr2 4010
  1396. @@ -270,3 +270,12 @@ good_combination { "-march=interaptiv-mr2 -32" "-march=m5100 -32" } \
  1397. { mips32r2 interaptiv-mr2 } \
  1398. MIPS32r5 "Imagination interAptiv MR2" \
  1399. { "DSP ASE" "Enhanced VA Scheme" "MT ASE" }
  1400. +
  1401. +good_combination { "-march=gs464 -32" "-march=gs464e -32" } \
  1402. + { gs464e o32 } \
  1403. + MIPS64r2 "None" \
  1404. + { "Loongson MMI ASE" "Loongson CAM ASE" "Loongson EXT ASE" "Loongson EXT2 ASE" }
  1405. +good_combination { "-march=gs264e -32" "-march=gs464e -32" } \
  1406. + { gs264e o32 } \
  1407. + MIPS64r2 "None" \
  1408. + { "Loongson MMI ASE" "Loongson CAM ASE" "Loongson EXT ASE" "Loongson EXT2 ASE" }
  1409. diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
  1410. index 984fcbb..5b9e173 100644
  1411. --- a/opcodes/mips-dis.c
  1412. +++ b/opcodes/mips-dis.c
  1413. @@ -625,12 +625,29 @@ const struct mips_arch_choice mips_arch_choices[] =
  1414. NULL, 0, mips_cp1_names_numeric, mips_hwr_names_numeric },
  1415.  
  1416. { "loongson2f", 1, bfd_mach_mips_loongson_2f, CPU_LOONGSON_2F,
  1417. - ISA_MIPS3 | INSN_LOONGSON_2F, 0, mips_cp0_names_numeric,
  1418. + ISA_MIPS3 | INSN_LOONGSON_2F, ASE_LOONGSON_MMI, mips_cp0_names_numeric,
  1419. NULL, 0, mips_cp1_names_numeric, mips_hwr_names_numeric },
  1420.  
  1421. - { "loongson3a", 1, bfd_mach_mips_loongson_3a, CPU_LOONGSON_3A,
  1422. - ISA_MIPS64R2 | INSN_LOONGSON_3A, 0, mips_cp0_names_numeric,
  1423. - NULL, 0, mips_cp1_names_mips3264, mips_hwr_names_numeric },
  1424. + /* The loongson3a is an alias of gs464 for compatibility */
  1425. + { "loongson3a", 1, bfd_mach_mips_gs464, CPU_GS464,
  1426. + ISA_MIPS64R2, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT,
  1427. + mips_cp0_names_numeric, NULL, 0, mips_cp1_names_mips3264,
  1428. + mips_hwr_names_numeric },
  1429. +
  1430. + { "g464", 1, bfd_mach_mips_gs464, CPU_GS464,
  1431. + ISA_MIPS64R2, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT,
  1432. + mips_cp0_names_numeric, NULL, 0, mips_cp1_names_mips3264,
  1433. + mips_hwr_names_numeric },
  1434. +
  1435. + { "g464e", 1, bfd_mach_mips_gs464e, CPU_GS464E,
  1436. + ISA_MIPS64R2, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT
  1437. + | ASE_LOONGSON_EXT2, mips_cp0_names_numeric, NULL, 0, mips_cp1_names_mips3264,
  1438. + mips_hwr_names_numeric },
  1439. +
  1440. + { "g264e", 1, bfd_mach_mips_gs464e, CPU_GS264E,
  1441. + ISA_MIPS64R2, ASE_LOONGSON_MMI | ASE_LOONGSON_CAM | ASE_LOONGSON_EXT
  1442. + | ASE_LOONGSON_EXT2 | ASE_MSA | ASE_MSA64, mips_cp0_names_numeric, NULL,
  1443. + 0, mips_cp1_names_mips3264, mips_hwr_names_numeric },
  1444.  
  1445. { "octeon", 1, bfd_mach_mips_octeon, CPU_OCTEON,
  1446. ISA_MIPS64R2 | INSN_OCTEON, 0, mips_cp0_names_numeric, NULL, 0,
  1447. @@ -928,6 +945,31 @@ parse_mips_ase_option (const char *option)
  1448. return TRUE;
  1449. }
  1450.  
  1451. + if (CONST_STRNEQ (option, "loongson-mmi"))
  1452. + {
  1453. + mips_ase |= ASE_LOONGSON_MMI;
  1454. + return TRUE;
  1455. + }
  1456. +
  1457. + if (CONST_STRNEQ (option, "loongson-cam"))
  1458. + {
  1459. + mips_ase |= ASE_LOONGSON_CAM;
  1460. + return TRUE;
  1461. + }
  1462. +
  1463. + /* Put here for match ext2 frist */
  1464. + if (CONST_STRNEQ (option, "loongson-ext2"))
  1465. + {
  1466. + mips_ase |= ASE_LOONGSON_EXT2;
  1467. + return TRUE;
  1468. + }
  1469. +
  1470. + if (CONST_STRNEQ (option, "loongson-ext"))
  1471. + {
  1472. + mips_ase |= ASE_LOONGSON_EXT;
  1473. + return TRUE;
  1474. + }
  1475. +
  1476. return FALSE;
  1477. }
  1478.  
  1479. @@ -2594,6 +2636,21 @@ with the -M switch (multiple options should be separated by commas):\n"));
  1480. specified architecture.\n"));
  1481.  
  1482. fprintf (stream, _("\n\
  1483. + loongson-mmi Recognize the Loongson MultiMedia extensions\n\
  1484. + Instructions (MMI) ASE instructions.\n"));
  1485. +
  1486. + fprintf (stream, _("\n\
  1487. + loongson-cam Recognize the Loongson Content Address Memory (CAM)\n\
  1488. + instructions.\n"));
  1489. +
  1490. + fprintf (stream, _("\n\
  1491. + loongson-ext Recognize the Loongson EXTensions (EXT)\n\
  1492. + instructions.\n"));
  1493. +
  1494. + fprintf (stream, _("\n\
  1495. + loongson-ext2 Recognize the Loongson EXTensions R2 (EXT2)\n\
  1496. + instructions.\n"));
  1497. + fprintf (stream, _("\n\
  1498. For the options above, the following values are supported for \"ABI\":\n\
  1499. "));
  1500. for (i = 0; i < ARRAY_SIZE (mips_abi_choices); i++)
  1501. diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
  1502. index 2f0c41d..4b891a1 100644
  1503. --- a/opcodes/mips-opc.c
  1504. +++ b/opcodes/mips-opc.c
  1505. @@ -307,7 +307,6 @@ decode_mips_operand (const char *p)
  1506.  
  1507. #define IL2E (INSN_LOONGSON_2E)
  1508. #define IL2F (INSN_LOONGSON_2F)
  1509. -#define IL3A (INSN_LOONGSON_3A)
  1510.  
  1511. #define P3 INSN_4650
  1512. #define L1 INSN_4010
  1513. @@ -406,6 +405,18 @@ decode_mips_operand (const char *p)
  1514. #define XPA ASE_XPA
  1515. #define XPAVZ ASE_XPA_VIRT
  1516.  
  1517. +/* Loongson MultiMedia extensions Instructions (MMI) support. */
  1518. +#define LMMI ASE_LOONGSON_MMI
  1519. +
  1520. +/* Loongson Content Address Memory (CAM) support. */
  1521. +#define LCAM ASE_LOONGSON_CAM
  1522. +
  1523. +/* Loongson EXTensions (EXT) instructions support. */
  1524. +#define LEXT ASE_LOONGSON_EXT
  1525. +
  1526. +/* Loongson EXTensions R2 (EXT2) instructions support. */
  1527. +#define LEXT2 ASE_LOONGSON_EXT2
  1528. +
  1529. /* The order of overloaded instructions matters. Label arguments and
  1530. register arguments look the same. Instructions that can have either
  1531. for arguments must apear in the correct order in this table for the
  1532. @@ -447,63 +458,67 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1533. {"lapc", "s,-A", 0xec000000, 0xfc180000, WR_1, RD_pc, I37, 0, 0 },
  1534. {"la", "t,A(b)", 0, (int) M_LA_AB, INSN_MACRO, 0, I1, 0, 0 },
  1535.  
  1536. -/* Loongson specific instructions. Loongson 3A redefines the Coprocessor 2
  1537. +/* Loongson specific instructions. Loongson gs464 (aka loongson3a) redefines the Coprocessor 2
  1538. instructions. Put them here so that disassembler will find them first.
  1539. The assemblers uses a hash table based on the instruction name anyhow. */
  1540. -{"campi", "d,s", 0x70000075, 0xfc1f07ff, WR_1|RD_2, 0, IL3A, 0, 0 },
  1541. -{"campv", "d,s", 0x70000035, 0xfc1f07ff, WR_1|RD_2, 0, IL3A, 0, 0 },
  1542. -{"camwi", "d,s,t", 0x700000b5, 0xfc0007ff, RD_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1543. -{"ramri", "d,s", 0x700000f5, 0xfc1f07ff, WR_1|RD_2, 0, IL3A, 0, 0 },
  1544. -{"gsle", "s,t", 0x70000026, 0xfc00ffff, RD_1|RD_2, 0, IL3A, 0, 0 },
  1545. -{"gsgt", "s,t", 0x70000027, 0xfc00ffff, RD_1|RD_2, 0, IL3A, 0, 0 },
  1546. -{"gslble", "t,b,d", 0xc8000010, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1547. -{"gslbgt", "t,b,d", 0xc8000011, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1548. -{"gslhle", "t,b,d", 0xc8000012, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1549. -{"gslhgt", "t,b,d", 0xc8000013, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1550. -{"gslwle", "t,b,d", 0xc8000014, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1551. -{"gslwgt", "t,b,d", 0xc8000015, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1552. -{"gsldle", "t,b,d", 0xc8000016, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1553. -{"gsldgt", "t,b,d", 0xc8000017, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1554. -{"gssble", "t,b,d", 0xe8000010, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1555. -{"gssbgt", "t,b,d", 0xe8000011, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1556. -{"gsshle", "t,b,d", 0xe8000012, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1557. -{"gsshgt", "t,b,d", 0xe8000013, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1558. -{"gsswle", "t,b,d", 0xe8000014, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1559. -{"gsswgt", "t,b,d", 0xe8000015, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1560. -{"gssdle", "t,b,d", 0xe8000016, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1561. -{"gssdgt", "t,b,d", 0xe8000017, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1562. -{"gslwlec1", "T,b,d", 0xc800001c, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1563. -{"gslwgtc1", "T,b,d", 0xc800001d, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1564. -{"gsldlec1", "T,b,d", 0xc800001e, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1565. -{"gsldgtc1", "T,b,d", 0xc800001f, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, IL3A, 0, 0 },
  1566. -{"gsswlec1", "T,b,d", 0xe800001c, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1567. -{"gsswgtc1", "T,b,d", 0xe800001d, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1568. -{"gssdlec1", "T,b,d", 0xe800001e, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1569. -{"gssdgtc1", "T,b,d", 0xe800001f, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, IL3A, 0, 0 },
  1570. -{"gslwlc1", "T,+a(b)", 0xc8000004, 0xfc00c03f, WR_1|RD_3|LM, 0, IL3A, 0, 0 },
  1571. -{"gslwrc1", "T,+a(b)", 0xc8000005, 0xfc00c03f, WR_1|RD_3|LM, 0, IL3A, 0, 0 },
  1572. -{"gsldlc1", "T,+a(b)", 0xc8000006, 0xfc00c03f, WR_1|RD_3|LM, 0, IL3A, 0, 0 },
  1573. -{"gsldrc1", "T,+a(b)", 0xc8000007, 0xfc00c03f, WR_1|RD_3|LM, 0, IL3A, 0, 0 },
  1574. -{"gsswlc1", "T,+a(b)", 0xe8000004, 0xfc00c03f, RD_1|RD_3|SM, 0, IL3A, 0, 0 },
  1575. -{"gsswrc1", "T,+a(b)", 0xe8000005, 0xfc00c03f, RD_1|RD_3|SM, 0, IL3A, 0, 0 },
  1576. -{"gssdlc1", "T,+a(b)", 0xe8000006, 0xfc00c03f, RD_1|RD_3|SM, 0, IL3A, 0, 0 },
  1577. -{"gssdrc1", "T,+a(b)", 0xe8000007, 0xfc00c03f, RD_1|RD_3|SM, 0, IL3A, 0, 0 },
  1578. -{"gslbx", "t,+b(b,d)", 0xd8000000, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, IL3A, 0, 0 },
  1579. -{"gslhx", "t,+b(b,d)", 0xd8000001, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, IL3A, 0, 0 },
  1580. -{"gslwx", "t,+b(b,d)", 0xd8000002, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, IL3A, 0, 0 },
  1581. -{"gsldx", "t,+b(b,d)", 0xd8000003, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, IL3A, 0, 0 },
  1582. -{"gssbx", "t,+b(b,d)", 0xf8000000, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, IL3A, 0, 0 },
  1583. -{"gsshx", "t,+b(b,d)", 0xf8000001, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, IL3A, 0, 0 },
  1584. -{"gsswx", "t,+b(b,d)", 0xf8000002, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, IL3A, 0, 0 },
  1585. -{"gssdx", "t,+b(b,d)", 0xf8000003, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, IL3A, 0, 0 },
  1586. -{"gslwxc1", "T,+b(b,d)", 0xd8000006, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, IL3A, 0, 0 },
  1587. -{"gsldxc1", "T,+b(b,d)", 0xd8000007, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, IL3A, 0, 0 },
  1588. -{"gsswxc1", "T,+b(b,d)", 0xf8000006, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, IL3A, 0, 0 },
  1589. -{"gssdxc1", "T,+b(b,d)", 0xf8000007, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, IL3A, 0, 0 },
  1590. -{"gslq", "+z,t,+c(b)", 0xc8000020, 0xfc008020, WR_1|WR_2|RD_4|LM, LMS, IL3A, 0, 0 },
  1591. -{"gssq", "+z,t,+c(b)", 0xe8000020, 0xfc008020, RD_1|RD_2|RD_4|SM, 0, IL3A, 0, 0 },
  1592. -{"gslqc1", "+Z,T,+c(b)", 0xc8008020, 0xfc008020, WR_1|WR_2|RD_4|LM, LMS, IL3A, 0, 0 },
  1593. -{"gssqc1", "+Z,T,+c(b)", 0xe8008020, 0xfc008020, RD_1|RD_2|RD_4|SM, 0, IL3A, 0, 0 },
  1594. +{"campi", "d,s", 0x70000075, 0xfc1f07ff, WR_1|RD_2, 0, 0, LCAM, 0 },
  1595. +{"campv", "d,s", 0x70000035, 0xfc1f07ff, WR_1|RD_2, 0, 0, LCAM, 0 },
  1596. +{"camwi", "d,s,t", 0x700000b5, 0xfc0007ff, RD_1|RD_2|RD_3, 0, 0, LCAM, 0 },
  1597. +{"ramri", "d,s", 0x700000f5, 0xfc1f07ff, WR_1|RD_2, 0, 0, LCAM, 0 },
  1598. +{"gsle", "s,t", 0x70000026, 0xfc00ffff, RD_1|RD_2, 0, 0, LEXT, 0 },
  1599. +{"gsgt", "s,t", 0x70000027, 0xfc00ffff, RD_1|RD_2, 0, 0, LEXT, 0 },
  1600. +{"gslble", "t,b,d", 0xc8000010, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1601. +{"gslbgt", "t,b,d", 0xc8000011, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1602. +{"gslhle", "t,b,d", 0xc8000012, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1603. +{"gslhgt", "t,b,d", 0xc8000013, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1604. +{"gslwle", "t,b,d", 0xc8000014, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1605. +{"gslwgt", "t,b,d", 0xc8000015, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1606. +{"gsldle", "t,b,d", 0xc8000016, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1607. +{"gsldgt", "t,b,d", 0xc8000017, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1608. +{"gssble", "t,b,d", 0xe8000010, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1609. +{"gssbgt", "t,b,d", 0xe8000011, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1610. +{"gsshle", "t,b,d", 0xe8000012, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1611. +{"gsshgt", "t,b,d", 0xe8000013, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1612. +{"gsswle", "t,b,d", 0xe8000014, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1613. +{"gsswgt", "t,b,d", 0xe8000015, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1614. +{"gssdle", "t,b,d", 0xe8000016, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1615. +{"gssdgt", "t,b,d", 0xe8000017, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1616. +{"gslwlec1", "T,b,d", 0xc8000018, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1617. +{"gslwgtc1", "T,b,d", 0xc8000019, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1618. +{"gsldlec1", "T,b,d", 0xc800001a, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1619. +{"gsldgtc1", "T,b,d", 0xc800001b, 0xfc0007ff, WR_1|RD_2|RD_3|LM, 0, 0, LEXT, 0 },
  1620. +{"gsswlec1", "T,b,d", 0xe800001c, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1621. +{"gsswgtc1", "T,b,d", 0xe800001d, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1622. +{"gssdlec1", "T,b,d", 0xe800001e, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1623. +{"gssdgtc1", "T,b,d", 0xe800001f, 0xfc0007ff, RD_1|RD_2|RD_3|SM, 0, 0, LEXT, 0 },
  1624. +{"gslwlc1", "T,+a(b)", 0xc8000004, 0xfc00c03f, WR_1|RD_3|LM, 0, 0, LEXT, 0 },
  1625. +{"gslwrc1", "T,+a(b)", 0xc8000005, 0xfc00c03f, WR_1|RD_3|LM, 0, 0, LEXT, 0 },
  1626. +{"gsldlc1", "T,+a(b)", 0xc8000006, 0xfc00c03f, WR_1|RD_3|LM, 0, 0, LEXT, 0 },
  1627. +{"gsldrc1", "T,+a(b)", 0xc8000007, 0xfc00c03f, WR_1|RD_3|LM, 0, 0, LEXT, 0 },
  1628. +{"gsswlc1", "T,+a(b)", 0xe8000004, 0xfc00c03f, RD_1|RD_3|SM, 0, 0, LEXT, 0 },
  1629. +{"gsswrc1", "T,+a(b)", 0xe8000005, 0xfc00c03f, RD_1|RD_3|SM, 0, 0, LEXT, 0 },
  1630. +{"gssdlc1", "T,+a(b)", 0xe8000006, 0xfc00c03f, RD_1|RD_3|SM, 0, 0, LEXT, 0 },
  1631. +{"gssdrc1", "T,+a(b)", 0xe8000007, 0xfc00c03f, RD_1|RD_3|SM, 0, 0, LEXT, 0 },
  1632. +{"gslbx", "t,+b(b,d)", 0xd8000000, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, 0, LEXT, 0 },
  1633. +{"gslhx", "t,+b(b,d)", 0xd8000001, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, 0, LEXT, 0 },
  1634. +{"gslwx", "t,+b(b,d)", 0xd8000002, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, 0, LEXT, 0 },
  1635. +{"gsldx", "t,+b(b,d)", 0xd8000003, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, 0, LEXT, 0 },
  1636. +{"gssbx", "t,+b(b,d)", 0xf8000000, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, 0, LEXT, 0 },
  1637. +{"gsshx", "t,+b(b,d)", 0xf8000001, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, 0, LEXT, 0 },
  1638. +{"gsswx", "t,+b(b,d)", 0xf8000002, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, 0, LEXT, 0 },
  1639. +{"gssdx", "t,+b(b,d)", 0xf8000003, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, 0, LEXT, 0 },
  1640. +{"gslwxc1", "T,+b(b,d)", 0xd8000006, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, 0, LEXT, 0 },
  1641. +{"gsldxc1", "T,+b(b,d)", 0xd8000007, 0xfc000007, WR_1|RD_3|RD_4|LM, 0, 0, LEXT, 0 },
  1642. +{"gsswxc1", "T,+b(b,d)", 0xf8000006, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, 0, LEXT, 0 },
  1643. +{"gssdxc1", "T,+b(b,d)", 0xf8000007, 0xfc000007, RD_1|RD_3|RD_4|SM, 0, 0, LEXT, 0 },
  1644. +{"gslq", "+z,t,+c(b)", 0xc8000020, 0xfc008020, WR_1|WR_2|RD_4|LM, 0, 0, LEXT, 0 },
  1645. +{"gssq", "+z,t,+c(b)", 0xe8000020, 0xfc008020, RD_1|RD_2|RD_4|SM, 0, 0, LEXT, 0 },
  1646. +{"gslqc1", "+Z,T,+c(b)", 0xc8008020, 0xfc008020, WR_1|WR_2|RD_4|LM, 0, 0, LEXT, 0 },
  1647. +{"gssqc1", "+Z,T,+c(b)", 0xe8008020, 0xfc008020, RD_1|RD_2|RD_4|SM, 0, 0, LEXT, 0 },
  1648. +{"cto", "d,s", 0x70000062, 0xfc1f07ff, WR_1|RD_2, 0, 0, LEXT2, 0 },
  1649. +{"ctz", "d,s", 0x70000022, 0xfc1f07ff, WR_1|RD_2, 0, 0, LEXT2, 0 },
  1650. +{"dcto", "d,s", 0x700000e2, 0xfc1f07ff, WR_1|RD_2, 0, 0, LEXT2, 0 },
  1651. +{"dctz", "d,s", 0x700000a2, 0xfc1f07ff, WR_1|RD_2, 0, 0, LEXT2, 0 },
  1652.  
  1653. /* R5900 VU0 Macromode instructions. */
  1654. {"vabs", "+7+K,+6+K", 0x4a0001fd, 0xfe0007ff, CP, VU0CH, VU0, 0, 0 },
  1655. @@ -646,7 +661,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1656. {"add", "d,v,t", 0x00000020, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1657. {"add", "t,r,I", 0, (int) M_ADD_I, INSN_MACRO, 0, I1, 0, I37 },
  1658. {"add", "D,S,T", 0x45c00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2E, 0, 0 },
  1659. -{"add", "D,S,T", 0x4b40000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2F|IL3A, 0, 0 },
  1660. +{"add", "D,S,T", 0x4b40000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, 0, LMMI, 0 },
  1661. {"add.s", "D,V,T", 0x46000000, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, I1, 0, 0 },
  1662. {"add.d", "D,V,T", 0x46200000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, I1, 0, SF },
  1663. {"add.ob", "X,Y,Q", 0x7800000b, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1664. @@ -667,7 +682,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1665. {"addu", "d,v,t", 0x00000021, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1666. {"addu", "t,r,I", 0, (int) M_ADDU_I, INSN_MACRO, 0, I1, 0, 0 },
  1667. {"addu", "D,S,T", 0x45800000, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2E, 0, 0 },
  1668. -{"addu", "D,S,T", 0x4b00000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2F|IL3A, 0, 0 },
  1669. +{"addu", "D,S,T", 0x4b00000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, 0, LMMI, 0 },
  1670. {"alni.ob", "X,Y,Z,O", 0x78000018, 0xff00003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1671. {"alni.ob", "D,S,T,%", 0x48000018, 0xff00003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1672. {"alni.qh", "X,Y,Z,O", 0x7800001a, 0xff00003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1673. @@ -677,7 +692,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1674. {"and", "d,v,t", 0x00000024, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1675. {"and", "t,r,I", 0, (int) M_AND_I, INSN_MACRO, 0, I1, 0, 0 },
  1676. {"and", "D,S,T", 0x47c00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1677. -{"and", "D,S,T", 0x4bc00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1678. +{"and", "D,S,T", 0x4bc00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1679. {"and.ob", "X,Y,Q", 0x7800000c, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1680. {"and.ob", "D,S,Q", 0x4800000c, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1681. {"and.qh", "X,Y,Q", 0x7820000c, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1682. @@ -995,7 +1010,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1683. {"dadd", "d,v,t", 0x0000002c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
  1684. {"dadd", "t,r,I", 0, (int) M_DADD_I, INSN_MACRO, 0, I3, 0, I69 },
  1685. {"dadd", "D,S,T", 0x45e00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1686. -{"dadd", "D,S,T", 0x4b60000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1687. +{"dadd", "D,S,T", 0x4b60000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1688. {"daddi", "t,r,j", 0x60000000, 0xfc000000, WR_1|RD_2, 0, I3, 0, I69 },
  1689. {"daddiu", "t,r,j", 0x64000000, 0xfc000000, WR_1|RD_2, 0, I3, 0, 0 },
  1690. {"daddu", "d,v,t", 0x0000002d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
  1691. @@ -1135,25 +1150,25 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1692. {"dsll", "d,w,>", 0x0000003c, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 }, /* dsll32 */
  1693. {"dsll", "d,w,<", 0x00000038, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 },
  1694. {"dsll", "D,S,T", 0x45a00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1695. -{"dsll", "D,S,T", 0x4b20000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1696. +{"dsll", "D,S,T", 0x4b20000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1697. {"dsrav", "d,t,s", 0x00000017, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
  1698. {"dsra32", "d,w,<", 0x0000003f, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 },
  1699. {"dsra", "d,w,s", 0x00000017, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 }, /* dsrav */
  1700. {"dsra", "d,w,>", 0x0000003f, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 }, /* dsra32 */
  1701. {"dsra", "d,w,<", 0x0000003b, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 },
  1702. {"dsra", "D,S,T", 0x45e00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1703. -{"dsra", "D,S,T", 0x4b60000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1704. +{"dsra", "D,S,T", 0x4b60000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1705. {"dsrlv", "d,t,s", 0x00000016, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
  1706. {"dsrl32", "d,w,<", 0x0000003e, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 },
  1707. {"dsrl", "d,w,s", 0x00000016, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 }, /* dsrlv */
  1708. {"dsrl", "d,w,>", 0x0000003e, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 }, /* dsrl32 */
  1709. {"dsrl", "d,w,<", 0x0000003a, 0xffe0003f, WR_1|RD_2, 0, I3, 0, 0 },
  1710. {"dsrl", "D,S,T", 0x45a00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1711. -{"dsrl", "D,S,T", 0x4b20000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1712. +{"dsrl", "D,S,T", 0x4b20000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1713. {"dsub", "d,v,t", 0x0000002e, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
  1714. {"dsub", "d,v,I", 0, (int) M_DSUB_I, INSN_MACRO, 0, I3, 0, I69 },
  1715. {"dsub", "D,S,T", 0x45e00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1716. -{"dsub", "D,S,T", 0x4b60000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1717. +{"dsub", "D,S,T", 0x4b60000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1718. {"dsubu", "d,v,t", 0x0000002f, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I3, 0, 0 },
  1719. {"dsubu", "d,v,I", 0, (int) M_DSUBU_I, INSN_MACRO, 0, I3, 0, 0 },
  1720. {"dvpe", "", 0x41600001, 0xffffffff, TRAP, 0, 0, MT32, 0 },
  1721. @@ -1430,7 +1445,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1722. {"movf.s", "D,S,N", 0x46000011, 0xffe3003f, WR_1|RD_2|RD_CC|FP_S, 0, I4_32, 0, I37 },
  1723. {"movf.ps", "D,S,N", 0x46c00011, 0xffe3003f, WR_1|RD_2|RD_CC|FP_D, 0, I5_33, 0, I37 },
  1724. {"movn", "d,v,t", 0x0000000b, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I4_32|IL2E|IL2F|EE, 0, I37 },
  1725. -{"movnz", "d,v,t", 0x0000000b, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E|IL2F|IL3A, 0, 0 },
  1726. +{"movnz", "d,v,t", 0x0000000b, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E|IL2F, LEXT, 0 },
  1727. {"ffc", "d,v", 0x0000000b, 0xfc1f07ff, WR_1|RD_2, 0, L1, 0, 0 },
  1728. {"movn.d", "D,S,t", 0x46200013, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, I4_32, 0, I37 },
  1729. {"movn.l", "D,S,t", 0x46a00013, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1730. @@ -1622,7 +1637,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1731. {"nor", "d,v,t", 0x00000027, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1732. {"nor", "t,r,I", 0, (int) M_NOR_I, INSN_MACRO, 0, I1, 0, 0 },
  1733. {"nor", "D,S,T", 0x47a00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1734. -{"nor", "D,S,T", 0x4ba00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1735. +{"nor", "D,S,T", 0x4ba00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1736. {"nor.ob", "X,Y,Q", 0x7800000f, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1737. {"nor.ob", "D,S,Q", 0x4800000f, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1738. {"nor.qh", "X,Y,Q", 0x7820000f, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1739. @@ -1630,7 +1645,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1740. {"or", "d,v,t", 0x00000025, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1741. {"or", "t,r,I", 0, (int) M_OR_I, INSN_MACRO, 0, I1, 0, 0 },
  1742. {"or", "D,S,T", 0x45a00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1743. -{"or", "D,S,T", 0x4b20000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1744. +{"or", "D,S,T", 0x4b20000c, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1745. {"or.ob", "X,Y,Q", 0x7800000e, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1746. {"or.ob", "D,S,Q", 0x4800000e, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1747. {"or.qh", "X,Y,Q", 0x7820000e, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1748. @@ -1843,7 +1858,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1749. {"seq", "d,v,t", 0, (int) M_SEQ, INSN_MACRO, 0, I1, 0, 0 },
  1750. {"seq", "d,v,I", 0, (int) M_SEQ_I, INSN_MACRO, 0, I1, 0, 0 },
  1751. {"seq", "S,T", 0x46a00032, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2E, 0, 0 },
  1752. -{"seq", "S,T", 0x4ba0000c, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2F|IL3A, 0, 0 },
  1753. +{"seq", "S,T", 0x4ba0000c, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, 0, LMMI, 0 },
  1754. {"seqi", "t,r,+Q", 0x7000002e, 0xfc00003f, WR_1|RD_2, 0, IOCT, 0, 0 },
  1755. {"sge", "d,v,t", 0, (int) M_SGE, INSN_MACRO, 0, I1, 0, 0 },
  1756. {"sge", "d,v,I", 0, (int) M_SGE_I, INSN_MACRO, 0, I1, 0, 0 },
  1757. @@ -1873,29 +1888,29 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1758. {"sle", "d,v,t", 0, (int) M_SLE, INSN_MACRO, 0, I1, 0, 0 },
  1759. {"sle", "d,v,I", 0, (int) M_SLE_I, INSN_MACRO, 0, I1, 0, 0 },
  1760. {"sle", "S,T", 0x46a0003e, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2E, 0, 0 },
  1761. -{"sle", "S,T", 0x4ba0000e, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2F|IL3A, 0, 0 },
  1762. +{"sle", "S,T", 0x4ba0000e, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, 0, LMMI, 0 },
  1763. {"sleu", "d,v,t", 0, (int) M_SLEU, INSN_MACRO, 0, I1, 0, 0 },
  1764. {"sleu", "d,v,I", 0, (int) M_SLEU_I, INSN_MACRO, 0, I1, 0, 0 },
  1765. {"sleu", "S,T", 0x4680003e, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2E, 0, 0 },
  1766. -{"sleu", "S,T", 0x4b80000e, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2F|IL3A, 0, 0 },
  1767. +{"sleu", "S,T", 0x4b80000e, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, 0, LMMI, 0 },
  1768. {"sllv", "d,t,s", 0x00000004, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1769. {"sll", "d,w,s", 0x00000004, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 }, /* sllv */
  1770. {"sll", "d,w,<", 0x00000000, 0xffe0003f, WR_1|RD_2, 0, I1, 0, 0 },
  1771. {"sll", "D,S,T", 0x45800002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1772. -{"sll", "D,S,T", 0x4b00000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1773. +{"sll", "D,S,T", 0x4b00000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1774. {"sll.ob", "X,Y,Q", 0x78000010, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1775. {"sll.ob", "D,S,Q", 0x48000010, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1776. {"sll.qh", "X,Y,Q", 0x78200010, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1777. {"slt", "d,v,t", 0x0000002a, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1778. {"slt", "d,v,I", 0, (int) M_SLT_I, INSN_MACRO, 0, I1, 0, 0 },
  1779. {"slt", "S,T", 0x46a0003c, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2E, 0, 0 },
  1780. -{"slt", "S,T", 0x4ba0000d, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2F|IL3A, 0, 0 },
  1781. +{"slt", "S,T", 0x4ba0000d, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, 0, LMMI, 0 },
  1782. {"slti", "t,r,j", 0x28000000, 0xfc000000, WR_1|RD_2, 0, I1, 0, 0 },
  1783. {"sltiu", "t,r,j", 0x2c000000, 0xfc000000, WR_1|RD_2, 0, I1, 0, 0 },
  1784. {"sltu", "d,v,t", 0x0000002b, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1785. {"sltu", "d,v,I", 0, (int) M_SLTU_I, INSN_MACRO, 0, I1, 0, 0 },
  1786. {"sltu", "S,T", 0x4680003c, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2E, 0, 0 },
  1787. -{"sltu", "S,T", 0x4b80000d, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2F|IL3A, 0, 0 },
  1788. +{"sltu", "S,T", 0x4b80000d, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, 0, LMMI, 0 },
  1789. {"sne", "d,v,t", 0x7000002b, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IOCT, 0, 0 },
  1790. {"sne", "d,v,t", 0, (int) M_SNE, INSN_MACRO, 0, I1, 0, 0 },
  1791. {"sne", "d,v,I", 0, (int) M_SNE_I, INSN_MACRO, 0, I1, 0, 0 },
  1792. @@ -1911,13 +1926,13 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1793. {"sra", "d,w,s", 0x00000007, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 }, /* srav */
  1794. {"sra", "d,w,<", 0x00000003, 0xffe0003f, WR_1|RD_2, 0, I1, 0, 0 },
  1795. {"sra", "D,S,T", 0x45c00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1796. -{"sra", "D,S,T", 0x4b40000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1797. +{"sra", "D,S,T", 0x4b40000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1798. {"sra.qh", "X,Y,Q", 0x78200013, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1799. {"srlv", "d,t,s", 0x00000006, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1800. {"srl", "d,w,s", 0x00000006, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 }, /* srlv */
  1801. {"srl", "d,w,<", 0x00000002, 0xffe0003f, WR_1|RD_2, 0, I1, 0, 0 },
  1802. {"srl", "D,S,T", 0x45800003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1803. -{"srl", "D,S,T", 0x4b00000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1804. +{"srl", "D,S,T", 0x4b00000f, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1805. {"srl.ob", "X,Y,Q", 0x78000012, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1806. {"srl.ob", "D,S,Q", 0x48000012, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1807. {"srl.qh", "X,Y,Q", 0x78200012, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1808. @@ -1926,7 +1941,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1809. {"sub", "d,v,t", 0x00000022, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1810. {"sub", "d,v,I", 0, (int) M_SUB_I, INSN_MACRO, 0, I1, 0, I37 },
  1811. {"sub", "D,S,T", 0x45c00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2E, 0, 0 },
  1812. -{"sub", "D,S,T", 0x4b40000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2F|IL3A, 0, 0 },
  1813. +{"sub", "D,S,T", 0x4b40000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, 0, LMMI, 0 },
  1814. {"sub.d", "D,V,T", 0x46200001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, I1, 0, SF },
  1815. {"sub.s", "D,V,T", 0x46000001, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, I1, 0, 0 },
  1816. {"sub.ob", "X,Y,Q", 0x7800000a, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1817. @@ -1942,7 +1957,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1818. {"subu", "d,v,t", 0x00000023, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1819. {"subu", "d,v,I", 0, (int) M_SUBU_I, INSN_MACRO, 0, I1, 0, 0 },
  1820. {"subu", "D,S,T", 0x45800001, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2E, 0, 0 },
  1821. -{"subu", "D,S,T", 0x4b00000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, IL2F|IL3A, 0, 0 },
  1822. +{"subu", "D,S,T", 0x4b00000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_S, 0, 0, LMMI, 0 },
  1823. {"suspend", "", 0x42000022, 0xffffffff, 0, 0, V1, 0, 0 },
  1824. {"suxc1", "S,t(b)", 0x4c00000d, 0xfc0007ff, RD_1|RD_2|RD_3|SM|FP_D, 0, I5_33|N55, 0, I37},
  1825. {"sw", "t,o(b)", 0xac000000, 0xfc000000, RD_1|RD_3|SM, 0, I1, 0, 0 },
  1826. @@ -2063,7 +2078,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1827. {"xor", "d,v,t", 0x00000026, 0xfc0007ff, WR_1|RD_2|RD_3, 0, I1, 0, 0 },
  1828. {"xor", "t,r,I", 0, (int) M_XOR_I, INSN_MACRO, 0, I1, 0, 0 },
  1829. {"xor", "D,S,T", 0x47800002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1830. -{"xor", "D,S,T", 0x4b800002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1831. +{"xor", "D,S,T", 0x4b800002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1832. {"xor.ob", "X,Y,Q", 0x7800000d, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, SB1, MX, 0 },
  1833. {"xor.ob", "D,S,Q", 0x4800000d, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, N54, 0, 0 },
  1834. {"xor.qh", "X,Y,Q", 0x7820000d, 0xfc20003f, WR_1|RD_2|RD_3|FP_D, 0, 0, MX, 0 },
  1835. @@ -2429,174 +2444,174 @@ const struct mips_opcode mips_builtin_opcodes[] =
  1836. /* ST Microelectronics Loongson-2E and -2F. */
  1837. {"mult.g", "d,s,t", 0x7c000018, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1838. {"mult.g", "d,s,t", 0x70000010, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1839. -{"gsmult", "d,s,t", 0x70000010, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1840. +{"gsmult", "d,s,t", 0x70000010, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1841. {"multu.g", "d,s,t", 0x7c000019, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1842. {"multu.g", "d,s,t", 0x70000012, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1843. -{"gsmultu", "d,s,t", 0x70000012, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1844. +{"gsmultu", "d,s,t", 0x70000012, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1845. {"dmult.g", "d,s,t", 0x7c00001c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1846. {"dmult.g", "d,s,t", 0x70000011, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1847. -{"gsdmult", "d,s,t", 0x70000011, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1848. +{"gsdmult", "d,s,t", 0x70000011, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1849. {"dmultu.g", "d,s,t", 0x7c00001d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1850. {"dmultu.g", "d,s,t", 0x70000013, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1851. -{"gsdmultu", "d,s,t", 0x70000013, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1852. +{"gsdmultu", "d,s,t", 0x70000013, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1853. {"div.g", "d,s,t", 0x7c00001a, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1854. {"div.g", "d,s,t", 0x70000014, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1855. -{"gsdiv", "d,s,t", 0x70000014, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1856. +{"gsdiv", "d,s,t", 0x70000014, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1857. {"divu.g", "d,s,t", 0x7c00001b, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1858. {"divu.g", "d,s,t", 0x70000016, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1859. -{"gsdivu", "d,s,t", 0x70000016, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1860. +{"gsdivu", "d,s,t", 0x70000016, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1861. {"ddiv.g", "d,s,t", 0x7c00001e, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1862. {"ddiv.g", "d,s,t", 0x70000015, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1863. -{"gsddiv", "d,s,t", 0x70000015, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1864. +{"gsddiv", "d,s,t", 0x70000015, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1865. {"ddivu.g", "d,s,t", 0x7c00001f, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1866. {"ddivu.g", "d,s,t", 0x70000017, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1867. -{"gsddivu", "d,s,t", 0x70000017, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1868. +{"gsddivu", "d,s,t", 0x70000017, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1869. {"mod.g", "d,s,t", 0x7c000022, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1870. {"mod.g", "d,s,t", 0x7000001c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1871. -{"gsmod", "d,s,t", 0x7000001c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1872. +{"gsmod", "d,s,t", 0x7000001c, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1873. {"modu.g", "d,s,t", 0x7c000023, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1874. {"modu.g", "d,s,t", 0x7000001e, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1875. -{"gsmodu", "d,s,t", 0x7000001e, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1876. +{"gsmodu", "d,s,t", 0x7000001e, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1877. {"dmod.g", "d,s,t", 0x7c000026, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1878. {"dmod.g", "d,s,t", 0x7000001d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1879. -{"gsdmod", "d,s,t", 0x7000001d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1880. +{"gsdmod", "d,s,t", 0x7000001d, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1881. {"dmodu.g", "d,s,t", 0x7c000027, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2E, 0, 0 },
  1882. {"dmodu.g", "d,s,t", 0x7000001f, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL2F, 0, 0 },
  1883. -{"gsdmodu", "d,s,t", 0x7000001f, 0xfc0007ff, WR_1|RD_2|RD_3, 0, IL3A, 0, 0 },
  1884. +{"gsdmodu", "d,s,t", 0x7000001f, 0xfc0007ff, WR_1|RD_2|RD_3, 0, 0, LEXT, 0 },
  1885. {"packsshb", "D,S,T", 0x47400002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1886. -{"packsshb", "D,S,T", 0x4b400002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1887. +{"packsshb", "D,S,T", 0x4b400002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1888. {"packsswh", "D,S,T", 0x47200002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1889. -{"packsswh", "D,S,T", 0x4b200002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1890. +{"packsswh", "D,S,T", 0x4b200002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1891. {"packushb", "D,S,T", 0x47600002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1892. -{"packushb", "D,S,T", 0x4b600002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1893. +{"packushb", "D,S,T", 0x4b600002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1894. {"paddb", "D,S,T", 0x47c00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1895. -{"paddb", "D,S,T", 0x4bc00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1896. +{"paddb", "D,S,T", 0x4bc00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1897. {"paddb", "d,s,t", 0x70000208, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  1898. {"paddh", "D,S,T", 0x47400000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1899. {"paddh", "d,s,t", 0x70000108, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  1900. -{"paddh", "D,S,T", 0x4b400000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1901. +{"paddh", "D,S,T", 0x4b400000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1902. {"paddw", "D,S,T", 0x47600000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1903. -{"paddw", "D,S,T", 0x4b600000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1904. +{"paddw", "D,S,T", 0x4b600000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1905. {"paddw", "d,s,t", 0x70000008, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  1906. {"paddd", "D,S,T", 0x47e00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1907. -{"paddd", "D,S,T", 0x4be00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1908. +{"paddd", "D,S,T", 0x4be00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1909. {"paddsb", "D,S,T", 0x47800000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1910. -{"paddsb", "D,S,T", 0x4b800000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1911. +{"paddsb", "D,S,T", 0x4b800000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1912. {"paddsb", "d,s,t", 0x70000608, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  1913. {"paddsh", "D,S,T", 0x47000000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1914. -{"paddsh", "D,S,T", 0x4b000000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1915. +{"paddsh", "D,S,T", 0x4b000000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1916. {"paddsh", "d,s,t", 0x70000508, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  1917. {"paddusb", "D,S,T", 0x47a00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1918. -{"paddusb", "D,S,T", 0x4ba00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1919. +{"paddusb", "D,S,T", 0x4ba00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1920. {"paddush", "D,S,T", 0x47200000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1921. -{"paddush", "D,S,T", 0x4b200000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1922. +{"paddush", "D,S,T", 0x4b200000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1923. {"pandn", "D,S,T", 0x47e00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1924. -{"pandn", "D,S,T", 0x4be00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1925. +{"pandn", "D,S,T", 0x4be00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1926. {"pavgb", "D,S,T", 0x46600000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1927. -{"pavgb", "D,S,T", 0x4b200008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1928. +{"pavgb", "D,S,T", 0x4b200008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1929. {"pavgh", "D,S,T", 0x46400000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1930. -{"pavgh", "D,S,T", 0x4b000008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1931. +{"pavgh", "D,S,T", 0x4b000008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1932. {"pcmpeqb", "D,S,T", 0x46c00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1933. -{"pcmpeqb", "D,S,T", 0x4b800009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1934. +{"pcmpeqb", "D,S,T", 0x4b800009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1935. {"pcmpeqh", "D,S,T", 0x46800001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1936. -{"pcmpeqh", "D,S,T", 0x4b400009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1937. +{"pcmpeqh", "D,S,T", 0x4b400009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1938. {"pcmpeqw", "D,S,T", 0x46400001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1939. -{"pcmpeqw", "D,S,T", 0x4b000009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1940. +{"pcmpeqw", "D,S,T", 0x4b000009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1941. {"pcmpgtb", "D,S,T", 0x46e00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1942. -{"pcmpgtb", "D,S,T", 0x4ba00009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1943. +{"pcmpgtb", "D,S,T", 0x4ba00009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1944. {"pcmpgth", "D,S,T", 0x46a00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1945. -{"pcmpgth", "D,S,T", 0x4b600009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1946. +{"pcmpgth", "D,S,T", 0x4b600009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1947. {"pcmpgtw", "D,S,T", 0x46600001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1948. -{"pcmpgtw", "D,S,T", 0x4b200009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1949. +{"pcmpgtw", "D,S,T", 0x4b200009, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1950. {"pextrh", "D,S,T", 0x45c00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1951. -{"pextrh", "D,S,T", 0x4b40000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1952. +{"pextrh", "D,S,T", 0x4b40000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1953. {"pinsrh_0", "D,S,T", 0x47800003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1954. -{"pinsrh_0", "D,S,T", 0x4b800003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1955. +{"pinsrh_0", "D,S,T", 0x4b800003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1956. {"pinsrh_1", "D,S,T", 0x47a00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1957. -{"pinsrh_1", "D,S,T", 0x4ba00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1958. +{"pinsrh_1", "D,S,T", 0x4ba00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1959. {"pinsrh_2", "D,S,T", 0x47c00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1960. -{"pinsrh_2", "D,S,T", 0x4bc00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1961. +{"pinsrh_2", "D,S,T", 0x4bc00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1962. {"pinsrh_3", "D,S,T", 0x47e00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1963. -{"pinsrh_3", "D,S,T", 0x4be00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1964. +{"pinsrh_3", "D,S,T", 0x4be00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1965. {"pmaddhw", "D,S,T", 0x45e00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1966. -{"pmaddhw", "D,S,T", 0x4b60000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1967. +{"pmaddhw", "D,S,T", 0x4b60000e, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1968. {"pmaxsh", "D,S,T", 0x46800000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1969. -{"pmaxsh", "D,S,T", 0x4b400008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1970. +{"pmaxsh", "D,S,T", 0x4b400008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1971. {"pmaxub", "D,S,T", 0x46c00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1972. -{"pmaxub", "D,S,T", 0x4b800008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1973. +{"pmaxub", "D,S,T", 0x4b800008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1974. {"pminsh", "D,S,T", 0x46a00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1975. -{"pminsh", "D,S,T", 0x4b600008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1976. +{"pminsh", "D,S,T", 0x4b600008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1977. {"pminub", "D,S,T", 0x46e00000, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1978. -{"pminub", "D,S,T", 0x4ba00008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1979. +{"pminub", "D,S,T", 0x4ba00008, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1980. {"pmovmskb", "D,S", 0x46a00005, 0xffff003f, WR_1|RD_2|FP_D, 0, IL2E, 0, 0 },
  1981. -{"pmovmskb", "D,S", 0x4ba0000f, 0xffff003f, WR_1|RD_2|FP_D, 0, IL2F|IL3A, 0, 0 },
  1982. +{"pmovmskb", "D,S", 0x4ba0000f, 0xffff003f, WR_1|RD_2|FP_D, 0, 0, LMMI, 0 },
  1983. {"pmulhuh", "D,S,T", 0x46e00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1984. -{"pmulhuh", "D,S,T", 0x4ba0000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1985. +{"pmulhuh", "D,S,T", 0x4ba0000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1986. {"pmulhh", "D,S,T", 0x46a00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1987. -{"pmulhh", "D,S,T", 0x4b60000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1988. +{"pmulhh", "D,S,T", 0x4b60000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1989. {"pmullh", "D,S,T", 0x46800002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1990. -{"pmullh", "D,S,T", 0x4b40000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1991. +{"pmullh", "D,S,T", 0x4b40000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1992. {"pmuluw", "D,S,T", 0x46c00002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1993. -{"pmuluw", "D,S,T", 0x4b80000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1994. +{"pmuluw", "D,S,T", 0x4b80000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1995. {"pasubub", "D,S,T", 0x45a00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  1996. -{"pasubub", "D,S,T", 0x4b20000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  1997. +{"pasubub", "D,S,T", 0x4b20000d, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  1998. {"biadd", "D,S", 0x46800005, 0xffff003f, WR_1|RD_2|FP_D, 0, IL2E, 0, 0 },
  1999. -{"biadd", "D,S", 0x4b80000f, 0xffff003f, WR_1|RD_2|FP_D, 0, IL2F|IL3A, 0, 0 },
  2000. +{"biadd", "D,S", 0x4b80000f, 0xffff003f, WR_1|RD_2|FP_D, 0, 0, LMMI, 0 },
  2001. {"pshufh", "D,S,T", 0x47000002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2002. -{"pshufh", "D,S,T", 0x4b000002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2003. +{"pshufh", "D,S,T", 0x4b000002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2004. {"psllh", "D,S,T", 0x46600002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2005. -{"psllh", "D,S,T", 0x4b20000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2006. +{"psllh", "D,S,T", 0x4b20000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2007. {"psllh", "d,t,<", 0x70000034, 0xffe0003f, WR_1|RD_2, 0, MMI, 0, 0 },
  2008. {"psllw", "D,S,T", 0x46400002, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2009. -{"psllw", "D,S,T", 0x4b00000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2010. +{"psllw", "D,S,T", 0x4b00000a, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2011. {"psllw", "d,t,<", 0x7000003c, 0xffe0003f, WR_1|RD_2, 0, MMI, 0, 0 },
  2012. {"psrah", "D,S,T", 0x46a00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2013. -{"psrah", "D,S,T", 0x4b60000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2014. +{"psrah", "D,S,T", 0x4b60000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2015. {"psrah", "d,t,<", 0x70000037, 0xffe0003f, WR_1|RD_2, 0, MMI, 0, 0 },
  2016. {"psraw", "D,S,T", 0x46800003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2017. -{"psraw", "D,S,T", 0x4b40000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2018. +{"psraw", "D,S,T", 0x4b40000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2019. {"psraw", "d,t,<", 0x7000003f, 0xffe0003f, WR_1|RD_2, 0, MMI, 0, 0 },
  2020. {"psrlh", "D,S,T", 0x46600003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2021. -{"psrlh", "D,S,T", 0x4b20000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2022. +{"psrlh", "D,S,T", 0x4b20000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2023. {"psrlh", "d,t,<", 0x70000036, 0xffe0003f, WR_1|RD_2, 0, MMI, 0, 0 },
  2024. {"psrlw", "D,S,T", 0x46400003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2025. -{"psrlw", "D,S,T", 0x4b00000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2026. +{"psrlw", "D,S,T", 0x4b00000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2027. {"psrlw", "d,t,<", 0x7000003e, 0xffe0003f, WR_1|RD_2, 0, MMI, 0, 0 },
  2028. {"psubb", "D,S,T", 0x47c00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2029. -{"psubb", "D,S,T", 0x4bc00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2030. +{"psubb", "D,S,T", 0x4bc00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2031. {"psubb", "d,s,t", 0x70000248, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  2032. {"psubh", "D,S,T", 0x47400001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2033. -{"psubh", "D,S,T", 0x4b400001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2034. +{"psubh", "D,S,T", 0x4b400001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2035. {"psubh", "d,s,t", 0x70000148, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  2036. {"psubw", "D,S,T", 0x47600001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2037. -{"psubw", "D,S,T", 0x4b600001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2038. +{"psubw", "D,S,T", 0x4b600001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2039. {"psubw", "d,s,t", 0x70000048, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  2040. {"psubd", "D,S,T", 0x47e00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2041. -{"psubd", "D,S,T", 0x4be00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2042. +{"psubd", "D,S,T", 0x4be00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2043. {"psubsb", "D,S,T", 0x47800001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2044. -{"psubsb", "D,S,T", 0x4b800001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2045. +{"psubsb", "D,S,T", 0x4b800001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2046. {"psubsb", "d,s,t", 0x70000648, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  2047. {"psubsh", "D,S,T", 0x47000001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2048. -{"psubsh", "D,S,T", 0x4b000001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2049. +{"psubsh", "D,S,T", 0x4b000001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2050. {"psubsh", "d,s,t", 0x70000548, 0xfc0007ff, WR_1|RD_2|RD_3, 0, MMI, 0, 0 },
  2051. {"psubusb", "D,S,T", 0x47a00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2052. -{"psubusb", "D,S,T", 0x4ba00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2053. +{"psubusb", "D,S,T", 0x4ba00001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2054. {"psubush", "D,S,T", 0x47200001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2055. -{"psubush", "D,S,T", 0x4b200001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2056. +{"psubush", "D,S,T", 0x4b200001, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2057. {"punpckhbh", "D,S,T", 0x47600003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2058. -{"punpckhbh", "D,S,T", 0x4b600003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2059. +{"punpckhbh", "D,S,T", 0x4b600003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2060. {"punpckhhw", "D,S,T", 0x47200003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2061. -{"punpckhhw", "D,S,T", 0x4b200003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2062. +{"punpckhhw", "D,S,T", 0x4b200003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2063. {"punpckhwd", "D,S,T", 0x46e00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2064. -{"punpckhwd", "D,S,T", 0x4ba0000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2065. +{"punpckhwd", "D,S,T", 0x4ba0000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2066. {"punpcklbh", "D,S,T", 0x47400003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2067. -{"punpcklbh", "D,S,T", 0x4b400003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2068. +{"punpcklbh", "D,S,T", 0x4b400003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2069. {"punpcklhw", "D,S,T", 0x47000003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2070. -{"punpcklhw", "D,S,T", 0x4b000003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2071. +{"punpcklhw", "D,S,T", 0x4b000003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2072. {"punpcklwd", "D,S,T", 0x46c00003, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2E, 0, 0 },
  2073. -{"punpcklwd", "D,S,T", 0x4b80000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, IL2F|IL3A, 0, 0 },
  2074. +{"punpcklwd", "D,S,T", 0x4b80000b, 0xffe0003f, WR_1|RD_2|RD_3|FP_D, 0, 0, LMMI, 0 },
  2075. {"sequ", "S,T", 0x46800032, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2E, 0, 0 },
  2076. -{"sequ", "S,T", 0x4b80000c, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, IL2F|IL3A, 0, 0 },
  2077. +{"sequ", "S,T", 0x4b80000c, 0xffe007ff, RD_1|RD_2|WR_CC|FP_D, 0, 0, LMMI, 0 },
  2078. /* MIPS Enhanced VA Scheme */
  2079. {"lbue", "t,+j(b)", 0x7c000028, 0xfc00007f, WR_1|RD_3|LM, 0, 0, EVA, 0 },
  2080. {"lbue", "t,A(b)", 0, (int) M_LBUE_AB, INSN_MACRO, 0, 0, EVA, 0 },
Add Comment
Please, Sign In to add comment