From b20441f22887a09e52d843e9b44bd7668c8a468c Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Sun, 3 Nov 2013 18:23:38 -0500 Subject: [PATCH] gnu: gdb: Fix opcode table for Loongson fused multiply-add. * gnu/packages/patches/gdb-loongson-madd-fix.patch: New file. * gnu/packages/gdb.scm (gdb): Add patch. * gnu-system.am (dist_patch_DATA): Add patch. --- gnu-system.am | 1 + gnu/packages/gdb.scm | 4 +- .../patches/gdb-loongson-madd-fix.patch | 44 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gdb-loongson-madd-fix.patch diff --git a/gnu-system.am b/gnu-system.am index 80d9438ad3..548f076c4c 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -220,6 +220,7 @@ dist_patch_DATA = \ gnu/packages/patches/flex-bison-tests.patch \ gnu/packages/patches/gawk-shell.patch \ gnu/packages/patches/gcc-cross-environment-variables.patch \ + gnu/packages/patches/gdb-loongson-madd-fix.patch \ gnu/packages/patches/glib-tests-desktop.patch \ gnu/packages/patches/glib-tests-homedir.patch \ gnu/packages/patches/glib-tests-newnet.patch \ diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm index 09e00aaeb1..2033c628d7 100644 --- a/gnu/packages/gdb.scm +++ b/gnu/packages/gdb.scm @@ -17,6 +17,7 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages gdb) + #:use-module (gnu packages) #:use-module (gnu packages ncurses) #:use-module (gnu packages readline) #:use-module (gnu packages dejagnu) @@ -39,7 +40,8 @@ (define-public gdb version ".tar.bz2")) (sha256 (base32 - "1r32s6vqgskw6pz9pmp41b8injd51c4bbxr6ifdpyid52j5a7pz3")))) + "1r32s6vqgskw6pz9pmp41b8injd51c4bbxr6ifdpyid52j5a7pz3")) + (patches (list (search-patch "gdb-loongson-madd-fix.patch"))))) (build-system gnu-build-system) (arguments '(#:phases (alist-cons-after diff --git a/gnu/packages/patches/gdb-loongson-madd-fix.patch b/gnu/packages/patches/gdb-loongson-madd-fix.patch new file mode 100644 index 0000000000..0d50dd2dd4 --- /dev/null +++ b/gnu/packages/patches/gdb-loongson-madd-fix.patch @@ -0,0 +1,44 @@ +Fix the Loongson 2F specific fused multiply-add instructions on paired singles to +use the encoding recognized by the processor, as opposed to the mistaken english +Loongson 2F documentation. + +Patch by Mark H Weaver . + +--- gdb/opcodes/mips-opc.c.orig 2013-02-09 05:24:18.000000000 -0500 ++++ gdb/opcodes/mips-opc.c 2013-10-27 23:35:20.191997541 -0400 +@@ -956,7 +956,7 @@ + {"madd.s", "D,S,T", 0x4600001c, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, EE }, + {"madd.ps", "D,R,S,T", 0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5_33 }, + {"madd.ps", "D,S,T", 0x45600018, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2E }, +-{"madd.ps", "D,S,T", 0x71600018, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, ++{"madd.ps", "D,S,T", 0x72c00018, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, + {"madd", "s,t", 0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 }, + {"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 }, + {"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, G1 }, +@@ -1084,7 +1084,7 @@ + {"msub.s", "D,S,T", 0x4600001d, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, EE }, + {"msub.ps", "D,R,S,T", 0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5_33 }, + {"msub.ps", "D,S,T", 0x45600019, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2E }, +-{"msub.ps", "D,S,T", 0x71600019, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, ++{"msub.ps", "D,S,T", 0x72c00019, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, + {"msub", "s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 }, + {"msub", "s,t", 0x70000004, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 }, + {"msub", "7,s,t", 0x70000004, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 }, +@@ -1218,7 +1218,7 @@ + {"nmadd.s", "D,S,T", 0x7200001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, IL2F }, + {"nmadd.ps","D,R,S,T", 0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5_33 }, + {"nmadd.ps", "D,S,T", 0x4560001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2E }, +-{"nmadd.ps", "D,S,T", 0x7160001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, ++{"nmadd.ps", "D,S,T", 0x72c0001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, + {"nmsub.d", "D,R,S,T", 0x4c000039, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4_33 }, + {"nmsub.d", "D,S,T", 0x4620001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2E }, + {"nmsub.d", "D,S,T", 0x7220001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, +@@ -1227,7 +1227,7 @@ + {"nmsub.s", "D,S,T", 0x7200001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, IL2F }, + {"nmsub.ps","D,R,S,T", 0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5_33 }, + {"nmsub.ps", "D,S,T", 0x4560001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2E }, +-{"nmsub.ps", "D,S,T", 0x7160001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, ++{"nmsub.ps", "D,S,T", 0x72c0001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, IL2F }, + /* nop is at the start of the table. */ + {"nor", "d,v,t", 0x00000027, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 }, + {"nor", "t,r,I", 0, (int) M_NOR_I, INSN_MACRO, 0, I1 },