From d64cf564d68acc89a263627d8ca65c3b838d82f4 Mon Sep 17 00:00:00 2001 From: Petar Jovanovic Date: Thu, 6 Oct 2016 13:54:12 +0000 Subject: [PATCH] mips: remove support for mfc0/dmfc0 Remove support for mfc0/dmfc0, as these instructions are privileged instructions and Valgrind cannot execute these. git-svn-id: svn://svn.valgrind.org/vex/trunk@3258 --- VEX/priv/guest_mips_defs.h | 5 - VEX/priv/guest_mips_helpers.c | 662 ---------------------------------- VEX/priv/guest_mips_toIR.c | 27 -- 3 files changed, 694 deletions(-) diff --git a/VEX/priv/guest_mips_defs.h b/VEX/priv/guest_mips_defs.h index f4c3bbc90a..60db3b5304 100644 --- a/VEX/priv/guest_mips_defs.h +++ b/VEX/priv/guest_mips_defs.h @@ -93,11 +93,6 @@ typedef enum { SUBS, SUBD, DIVS } flt_op; -extern UInt mips32_dirtyhelper_mfc0 ( UInt rd, UInt sel ); - -extern ULong mips64_dirtyhelper_dmfc0 ( UInt rd, UInt sel ); - - #if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev >= 2)) extern UInt mips32_dirtyhelper_rdhwr ( UInt rt, UInt rd ); extern ULong mips64_dirtyhelper_rdhwr ( ULong rt, ULong rd ); diff --git a/VEX/priv/guest_mips_helpers.c b/VEX/priv/guest_mips_helpers.c index fd42513675..d04f8d8280 100644 --- a/VEX/priv/guest_mips_helpers.c +++ b/VEX/priv/guest_mips_helpers.c @@ -418,668 +418,6 @@ VexGuestLayout mips64Guest_layout = { } }; -#define ASM_VOLATILE_CASE(rd, sel) \ - case rd: \ - asm volatile ("mfc0 %0, $" #rd ", "#sel"\n\t" :"=r" (x) ); \ - break; - -UInt mips32_dirtyhelper_mfc0(UInt rd, UInt sel) -{ - UInt x = 0; -#if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev >= 2)) - switch (sel) { - case 0: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 0); - ASM_VOLATILE_CASE(1, 0); - ASM_VOLATILE_CASE(2, 0); - ASM_VOLATILE_CASE(3, 0); - ASM_VOLATILE_CASE(4, 0); - ASM_VOLATILE_CASE(5, 0); - ASM_VOLATILE_CASE(6, 0); - ASM_VOLATILE_CASE(7, 0); - ASM_VOLATILE_CASE(8, 0); - ASM_VOLATILE_CASE(9, 0); - ASM_VOLATILE_CASE(10, 0); - ASM_VOLATILE_CASE(11, 0); - ASM_VOLATILE_CASE(12, 0); - ASM_VOLATILE_CASE(13, 0); - ASM_VOLATILE_CASE(14, 0); - ASM_VOLATILE_CASE(15, 0); - ASM_VOLATILE_CASE(16, 0); - ASM_VOLATILE_CASE(17, 0); - ASM_VOLATILE_CASE(18, 0); - ASM_VOLATILE_CASE(19, 0); - ASM_VOLATILE_CASE(20, 0); - ASM_VOLATILE_CASE(21, 0); - ASM_VOLATILE_CASE(22, 0); - ASM_VOLATILE_CASE(23, 0); - ASM_VOLATILE_CASE(24, 0); - ASM_VOLATILE_CASE(25, 0); - ASM_VOLATILE_CASE(26, 0); - ASM_VOLATILE_CASE(27, 0); - ASM_VOLATILE_CASE(28, 0); - ASM_VOLATILE_CASE(29, 0); - ASM_VOLATILE_CASE(30, 0); - ASM_VOLATILE_CASE(31, 0); - default: - break; - } - break; - case 1: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 1); - ASM_VOLATILE_CASE(1, 1); - ASM_VOLATILE_CASE(2, 1); - ASM_VOLATILE_CASE(3, 1); - ASM_VOLATILE_CASE(4, 1); - ASM_VOLATILE_CASE(5, 1); - ASM_VOLATILE_CASE(6, 1); - ASM_VOLATILE_CASE(7, 1); - ASM_VOLATILE_CASE(8, 1); - ASM_VOLATILE_CASE(9, 1); - ASM_VOLATILE_CASE(10, 1); - ASM_VOLATILE_CASE(11, 1); - ASM_VOLATILE_CASE(12, 1); - ASM_VOLATILE_CASE(13, 1); - ASM_VOLATILE_CASE(14, 1); - ASM_VOLATILE_CASE(15, 1); - ASM_VOLATILE_CASE(16, 1); - ASM_VOLATILE_CASE(17, 1); - ASM_VOLATILE_CASE(18, 1); - ASM_VOLATILE_CASE(19, 1); - ASM_VOLATILE_CASE(20, 1); - ASM_VOLATILE_CASE(21, 1); - ASM_VOLATILE_CASE(22, 1); - ASM_VOLATILE_CASE(23, 1); - ASM_VOLATILE_CASE(24, 1); - ASM_VOLATILE_CASE(25, 1); - ASM_VOLATILE_CASE(26, 1); - ASM_VOLATILE_CASE(27, 1); - ASM_VOLATILE_CASE(28, 1); - ASM_VOLATILE_CASE(29, 1); - ASM_VOLATILE_CASE(30, 1); - ASM_VOLATILE_CASE(31, 1); - default: - break; - } - break; - case 2: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 2); - ASM_VOLATILE_CASE(1, 2); - ASM_VOLATILE_CASE(2, 2); - ASM_VOLATILE_CASE(3, 1); - ASM_VOLATILE_CASE(4, 2); - ASM_VOLATILE_CASE(5, 2); - ASM_VOLATILE_CASE(6, 2); - ASM_VOLATILE_CASE(7, 2); - ASM_VOLATILE_CASE(8, 2); - ASM_VOLATILE_CASE(9, 2); - ASM_VOLATILE_CASE(10, 2); - ASM_VOLATILE_CASE(11, 2); - ASM_VOLATILE_CASE(12, 2); - ASM_VOLATILE_CASE(13, 2); - ASM_VOLATILE_CASE(14, 2); - ASM_VOLATILE_CASE(15, 2); - ASM_VOLATILE_CASE(16, 2); - ASM_VOLATILE_CASE(17, 2); - ASM_VOLATILE_CASE(18, 2); - ASM_VOLATILE_CASE(19, 2); - ASM_VOLATILE_CASE(20, 2); - ASM_VOLATILE_CASE(21, 2); - ASM_VOLATILE_CASE(22, 2); - ASM_VOLATILE_CASE(23, 2); - ASM_VOLATILE_CASE(24, 2); - ASM_VOLATILE_CASE(25, 2); - ASM_VOLATILE_CASE(26, 2); - ASM_VOLATILE_CASE(27, 2); - ASM_VOLATILE_CASE(28, 2); - ASM_VOLATILE_CASE(29, 2); - ASM_VOLATILE_CASE(30, 2); - ASM_VOLATILE_CASE(31, 2); - default: - break; - } - break; - case 3: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 3); - ASM_VOLATILE_CASE(1, 3); - ASM_VOLATILE_CASE(2, 3); - ASM_VOLATILE_CASE(3, 3); - ASM_VOLATILE_CASE(4, 3); - ASM_VOLATILE_CASE(5, 3); - ASM_VOLATILE_CASE(6, 3); - ASM_VOLATILE_CASE(7, 3); - ASM_VOLATILE_CASE(8, 3); - ASM_VOLATILE_CASE(9, 3); - ASM_VOLATILE_CASE(10, 3); - ASM_VOLATILE_CASE(11, 3); - ASM_VOLATILE_CASE(12, 3); - ASM_VOLATILE_CASE(13, 3); - ASM_VOLATILE_CASE(14, 3); - ASM_VOLATILE_CASE(15, 3); - ASM_VOLATILE_CASE(16, 3); - ASM_VOLATILE_CASE(17, 3); - ASM_VOLATILE_CASE(18, 3); - ASM_VOLATILE_CASE(19, 3); - ASM_VOLATILE_CASE(20, 3); - ASM_VOLATILE_CASE(21, 3); - ASM_VOLATILE_CASE(22, 3); - ASM_VOLATILE_CASE(23, 3); - ASM_VOLATILE_CASE(24, 3); - ASM_VOLATILE_CASE(25, 3); - ASM_VOLATILE_CASE(26, 3); - ASM_VOLATILE_CASE(27, 3); - ASM_VOLATILE_CASE(28, 3); - ASM_VOLATILE_CASE(29, 3); - ASM_VOLATILE_CASE(30, 3); - ASM_VOLATILE_CASE(31, 3); - default: - break; - } - break; - case 4: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 4); - ASM_VOLATILE_CASE(1, 4); - ASM_VOLATILE_CASE(2, 4); - ASM_VOLATILE_CASE(3, 4); - ASM_VOLATILE_CASE(4, 4); - ASM_VOLATILE_CASE(5, 4); - ASM_VOLATILE_CASE(6, 4); - ASM_VOLATILE_CASE(7, 4); - ASM_VOLATILE_CASE(8, 4); - ASM_VOLATILE_CASE(9, 4); - ASM_VOLATILE_CASE(10, 4); - ASM_VOLATILE_CASE(11, 4); - ASM_VOLATILE_CASE(12, 4); - ASM_VOLATILE_CASE(13, 4); - ASM_VOLATILE_CASE(14, 4); - ASM_VOLATILE_CASE(15, 4); - ASM_VOLATILE_CASE(16, 4); - ASM_VOLATILE_CASE(17, 4); - ASM_VOLATILE_CASE(18, 4); - ASM_VOLATILE_CASE(19, 4); - ASM_VOLATILE_CASE(20, 4); - ASM_VOLATILE_CASE(21, 4); - ASM_VOLATILE_CASE(22, 4); - ASM_VOLATILE_CASE(23, 4); - ASM_VOLATILE_CASE(24, 4); - ASM_VOLATILE_CASE(25, 4); - ASM_VOLATILE_CASE(26, 4); - ASM_VOLATILE_CASE(27, 4); - ASM_VOLATILE_CASE(28, 4); - ASM_VOLATILE_CASE(29, 4); - ASM_VOLATILE_CASE(30, 4); - ASM_VOLATILE_CASE(31, 4); - default: - break; - } - break; - case 5: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 5); - ASM_VOLATILE_CASE(1, 5); - ASM_VOLATILE_CASE(2, 5); - ASM_VOLATILE_CASE(3, 5); - ASM_VOLATILE_CASE(4, 5); - ASM_VOLATILE_CASE(5, 5); - ASM_VOLATILE_CASE(6, 5); - ASM_VOLATILE_CASE(7, 5); - ASM_VOLATILE_CASE(8, 5); - ASM_VOLATILE_CASE(9, 5); - ASM_VOLATILE_CASE(10, 5); - ASM_VOLATILE_CASE(11, 5); - ASM_VOLATILE_CASE(12, 5); - ASM_VOLATILE_CASE(13, 5); - ASM_VOLATILE_CASE(14, 5); - ASM_VOLATILE_CASE(15, 5); - ASM_VOLATILE_CASE(16, 5); - ASM_VOLATILE_CASE(17, 5); - ASM_VOLATILE_CASE(18, 5); - ASM_VOLATILE_CASE(19, 5); - ASM_VOLATILE_CASE(20, 5); - ASM_VOLATILE_CASE(21, 5); - ASM_VOLATILE_CASE(22, 5); - ASM_VOLATILE_CASE(23, 5); - ASM_VOLATILE_CASE(24, 5); - ASM_VOLATILE_CASE(25, 5); - ASM_VOLATILE_CASE(26, 5); - ASM_VOLATILE_CASE(27, 5); - ASM_VOLATILE_CASE(28, 5); - ASM_VOLATILE_CASE(29, 5); - ASM_VOLATILE_CASE(30, 5); - ASM_VOLATILE_CASE(31, 5); - default: - break; - } - break; - case 6: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 6); - ASM_VOLATILE_CASE(1, 6); - ASM_VOLATILE_CASE(2, 6); - ASM_VOLATILE_CASE(3, 6); - ASM_VOLATILE_CASE(4, 6); - ASM_VOLATILE_CASE(5, 6); - ASM_VOLATILE_CASE(6, 6); - ASM_VOLATILE_CASE(7, 6); - ASM_VOLATILE_CASE(8, 6); - ASM_VOLATILE_CASE(9, 6); - ASM_VOLATILE_CASE(10, 6); - ASM_VOLATILE_CASE(11, 6); - ASM_VOLATILE_CASE(12, 6); - ASM_VOLATILE_CASE(13, 6); - ASM_VOLATILE_CASE(14, 6); - ASM_VOLATILE_CASE(15, 6); - ASM_VOLATILE_CASE(16, 6); - ASM_VOLATILE_CASE(17, 6); - ASM_VOLATILE_CASE(18, 6); - ASM_VOLATILE_CASE(19, 6); - ASM_VOLATILE_CASE(20, 6); - ASM_VOLATILE_CASE(21, 6); - ASM_VOLATILE_CASE(22, 6); - ASM_VOLATILE_CASE(23, 6); - ASM_VOLATILE_CASE(24, 6); - ASM_VOLATILE_CASE(25, 6); - ASM_VOLATILE_CASE(26, 6); - ASM_VOLATILE_CASE(27, 6); - ASM_VOLATILE_CASE(28, 6); - ASM_VOLATILE_CASE(29, 6); - ASM_VOLATILE_CASE(30, 6); - ASM_VOLATILE_CASE(31, 6); - default: - break; - } - break; - case 7: - /* __asm__("mfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE(0, 7); - ASM_VOLATILE_CASE(1, 7); - ASM_VOLATILE_CASE(2, 7); - ASM_VOLATILE_CASE(3, 7); - ASM_VOLATILE_CASE(4, 7); - ASM_VOLATILE_CASE(5, 7); - ASM_VOLATILE_CASE(6, 7); - ASM_VOLATILE_CASE(7, 7); - ASM_VOLATILE_CASE(8, 7); - ASM_VOLATILE_CASE(9, 7); - ASM_VOLATILE_CASE(10, 7); - ASM_VOLATILE_CASE(11, 7); - ASM_VOLATILE_CASE(12, 7); - ASM_VOLATILE_CASE(13, 7); - ASM_VOLATILE_CASE(14, 7); - ASM_VOLATILE_CASE(15, 7); - ASM_VOLATILE_CASE(16, 7); - ASM_VOLATILE_CASE(17, 7); - ASM_VOLATILE_CASE(18, 7); - ASM_VOLATILE_CASE(19, 7); - ASM_VOLATILE_CASE(20, 7); - ASM_VOLATILE_CASE(21, 7); - ASM_VOLATILE_CASE(22, 7); - ASM_VOLATILE_CASE(23, 7); - ASM_VOLATILE_CASE(24, 7); - ASM_VOLATILE_CASE(25, 7); - ASM_VOLATILE_CASE(26, 7); - ASM_VOLATILE_CASE(27, 7); - ASM_VOLATILE_CASE(28, 7); - ASM_VOLATILE_CASE(29, 7); - ASM_VOLATILE_CASE(30, 7); - ASM_VOLATILE_CASE(31, 7); - default: - break; - } - break; - - default: - break; - } -#endif - return x; -} - -#undef ASM_VOLATILE_CASE - -#define ASM_VOLATILE_CASE(rd, sel) \ - case rd: \ - asm volatile ("dmfc0 %0, $" #rd ", "#sel"\n\t" :"=r" (x) ); \ - break; - -ULong mips64_dirtyhelper_dmfc0 ( UInt rd, UInt sel ) -{ - ULong x = 0; -#if defined(VGP_mips64_linux) - switch (sel) { - case 0: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 0); - ASM_VOLATILE_CASE (1, 0); - ASM_VOLATILE_CASE (2, 0); - ASM_VOLATILE_CASE (3, 0); - ASM_VOLATILE_CASE (4, 0); - ASM_VOLATILE_CASE (5, 0); - ASM_VOLATILE_CASE (6, 0); - ASM_VOLATILE_CASE (7, 0); - ASM_VOLATILE_CASE (8, 0); - ASM_VOLATILE_CASE (9, 0); - ASM_VOLATILE_CASE (10, 0); - ASM_VOLATILE_CASE (11, 0); - ASM_VOLATILE_CASE (12, 0); - ASM_VOLATILE_CASE (13, 0); - ASM_VOLATILE_CASE (14, 0); - ASM_VOLATILE_CASE (15, 0); - ASM_VOLATILE_CASE (16, 0); - ASM_VOLATILE_CASE (17, 0); - ASM_VOLATILE_CASE (18, 0); - ASM_VOLATILE_CASE (19, 0); - ASM_VOLATILE_CASE (20, 0); - ASM_VOLATILE_CASE (21, 0); - ASM_VOLATILE_CASE (22, 0); - ASM_VOLATILE_CASE (23, 0); - ASM_VOLATILE_CASE (24, 0); - ASM_VOLATILE_CASE (25, 0); - ASM_VOLATILE_CASE (26, 0); - ASM_VOLATILE_CASE (27, 0); - ASM_VOLATILE_CASE (28, 0); - ASM_VOLATILE_CASE (29, 0); - ASM_VOLATILE_CASE (30, 0); - ASM_VOLATILE_CASE (31, 0); - default: - break; - } - break; - case 1: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 1); - ASM_VOLATILE_CASE (1, 1); - ASM_VOLATILE_CASE (2, 1); - ASM_VOLATILE_CASE (3, 1); - ASM_VOLATILE_CASE (4, 1); - ASM_VOLATILE_CASE (5, 1); - ASM_VOLATILE_CASE (6, 1); - ASM_VOLATILE_CASE (7, 1); - ASM_VOLATILE_CASE (8, 1); - ASM_VOLATILE_CASE (9, 1); - ASM_VOLATILE_CASE (10, 1); - ASM_VOLATILE_CASE (11, 1); - ASM_VOLATILE_CASE (12, 1); - ASM_VOLATILE_CASE (13, 1); - ASM_VOLATILE_CASE (14, 1); - ASM_VOLATILE_CASE (15, 1); - ASM_VOLATILE_CASE (16, 1); - ASM_VOLATILE_CASE (17, 1); - ASM_VOLATILE_CASE (18, 1); - ASM_VOLATILE_CASE (19, 1); - ASM_VOLATILE_CASE (20, 1); - ASM_VOLATILE_CASE (21, 1); - ASM_VOLATILE_CASE (22, 1); - ASM_VOLATILE_CASE (23, 1); - ASM_VOLATILE_CASE (24, 1); - ASM_VOLATILE_CASE (25, 1); - ASM_VOLATILE_CASE (26, 1); - ASM_VOLATILE_CASE (27, 1); - ASM_VOLATILE_CASE (28, 1); - ASM_VOLATILE_CASE (29, 1); - ASM_VOLATILE_CASE (30, 1); - ASM_VOLATILE_CASE (31, 1); - default: - break; - } - break; - case 2: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 2); - ASM_VOLATILE_CASE (1, 2); - ASM_VOLATILE_CASE (2, 2); - ASM_VOLATILE_CASE (3, 1); - ASM_VOLATILE_CASE (4, 2); - ASM_VOLATILE_CASE (5, 2); - ASM_VOLATILE_CASE (6, 2); - ASM_VOLATILE_CASE (7, 2); - ASM_VOLATILE_CASE (8, 2); - ASM_VOLATILE_CASE (9, 2); - ASM_VOLATILE_CASE (10, 2); - ASM_VOLATILE_CASE (11, 2); - ASM_VOLATILE_CASE (12, 2); - ASM_VOLATILE_CASE (13, 2); - ASM_VOLATILE_CASE (14, 2); - ASM_VOLATILE_CASE (15, 2); - ASM_VOLATILE_CASE (16, 2); - ASM_VOLATILE_CASE (17, 2); - ASM_VOLATILE_CASE (18, 2); - ASM_VOLATILE_CASE (19, 2); - ASM_VOLATILE_CASE (20, 2); - ASM_VOLATILE_CASE (21, 2); - ASM_VOLATILE_CASE (22, 2); - ASM_VOLATILE_CASE (23, 2); - ASM_VOLATILE_CASE (24, 2); - ASM_VOLATILE_CASE (25, 2); - ASM_VOLATILE_CASE (26, 2); - ASM_VOLATILE_CASE (27, 2); - ASM_VOLATILE_CASE (28, 2); - ASM_VOLATILE_CASE (29, 2); - ASM_VOLATILE_CASE (30, 2); - ASM_VOLATILE_CASE (31, 2); - default: - break; - } - break; - case 3: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 3); - ASM_VOLATILE_CASE (1, 3); - ASM_VOLATILE_CASE (2, 3); - ASM_VOLATILE_CASE (3, 3); - ASM_VOLATILE_CASE (4, 3); - ASM_VOLATILE_CASE (5, 3); - ASM_VOLATILE_CASE (6, 3); - ASM_VOLATILE_CASE (7, 3); - ASM_VOLATILE_CASE (8, 3); - ASM_VOLATILE_CASE (9, 3); - ASM_VOLATILE_CASE (10, 3); - ASM_VOLATILE_CASE (11, 3); - ASM_VOLATILE_CASE (12, 3); - ASM_VOLATILE_CASE (13, 3); - ASM_VOLATILE_CASE (14, 3); - ASM_VOLATILE_CASE (15, 3); - ASM_VOLATILE_CASE (16, 3); - ASM_VOLATILE_CASE (17, 3); - ASM_VOLATILE_CASE (18, 3); - ASM_VOLATILE_CASE (19, 3); - ASM_VOLATILE_CASE (20, 3); - ASM_VOLATILE_CASE (21, 3); - ASM_VOLATILE_CASE (22, 3); - ASM_VOLATILE_CASE (23, 3); - ASM_VOLATILE_CASE (24, 3); - ASM_VOLATILE_CASE (25, 3); - ASM_VOLATILE_CASE (26, 3); - ASM_VOLATILE_CASE (27, 3); - ASM_VOLATILE_CASE (28, 3); - ASM_VOLATILE_CASE (29, 3); - ASM_VOLATILE_CASE (30, 3); - ASM_VOLATILE_CASE (31, 3); - default: - break; - } - break; - case 4: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 4); - ASM_VOLATILE_CASE (1, 4); - ASM_VOLATILE_CASE (2, 4); - ASM_VOLATILE_CASE (3, 4); - ASM_VOLATILE_CASE (4, 4); - ASM_VOLATILE_CASE (5, 4); - ASM_VOLATILE_CASE (6, 4); - ASM_VOLATILE_CASE (7, 4); - ASM_VOLATILE_CASE (8, 4); - ASM_VOLATILE_CASE (9, 4); - ASM_VOLATILE_CASE (10, 4); - ASM_VOLATILE_CASE (11, 4); - ASM_VOLATILE_CASE (12, 4); - ASM_VOLATILE_CASE (13, 4); - ASM_VOLATILE_CASE (14, 4); - ASM_VOLATILE_CASE (15, 4); - ASM_VOLATILE_CASE (16, 4); - ASM_VOLATILE_CASE (17, 4); - ASM_VOLATILE_CASE (18, 4); - ASM_VOLATILE_CASE (19, 4); - ASM_VOLATILE_CASE (20, 4); - ASM_VOLATILE_CASE (21, 4); - ASM_VOLATILE_CASE (22, 4); - ASM_VOLATILE_CASE (23, 4); - ASM_VOLATILE_CASE (24, 4); - ASM_VOLATILE_CASE (25, 4); - ASM_VOLATILE_CASE (26, 4); - ASM_VOLATILE_CASE (27, 4); - ASM_VOLATILE_CASE (28, 4); - ASM_VOLATILE_CASE (29, 4); - ASM_VOLATILE_CASE (30, 4); - ASM_VOLATILE_CASE (31, 4); - default: - break; - } - break; - case 5: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 5); - ASM_VOLATILE_CASE (1, 5); - ASM_VOLATILE_CASE (2, 5); - ASM_VOLATILE_CASE (3, 5); - ASM_VOLATILE_CASE (4, 5); - ASM_VOLATILE_CASE (5, 5); - ASM_VOLATILE_CASE (6, 5); - ASM_VOLATILE_CASE (7, 5); - ASM_VOLATILE_CASE (8, 5); - ASM_VOLATILE_CASE (9, 5); - ASM_VOLATILE_CASE (10, 5); - ASM_VOLATILE_CASE (11, 5); - ASM_VOLATILE_CASE (12, 5); - ASM_VOLATILE_CASE (13, 5); - ASM_VOLATILE_CASE (14, 5); - ASM_VOLATILE_CASE (15, 5); - ASM_VOLATILE_CASE (16, 5); - ASM_VOLATILE_CASE (17, 5); - ASM_VOLATILE_CASE (18, 5); - ASM_VOLATILE_CASE (19, 5); - ASM_VOLATILE_CASE (20, 5); - ASM_VOLATILE_CASE (21, 5); - ASM_VOLATILE_CASE (22, 5); - ASM_VOLATILE_CASE (23, 5); - ASM_VOLATILE_CASE (24, 5); - ASM_VOLATILE_CASE (25, 5); - ASM_VOLATILE_CASE (26, 5); - ASM_VOLATILE_CASE (27, 5); - ASM_VOLATILE_CASE (28, 5); - ASM_VOLATILE_CASE (29, 5); - ASM_VOLATILE_CASE (30, 5); - ASM_VOLATILE_CASE (31, 5); - default: - break; - } - break; - case 6: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 6); - ASM_VOLATILE_CASE (1, 6); - ASM_VOLATILE_CASE (2, 6); - ASM_VOLATILE_CASE (3, 6); - ASM_VOLATILE_CASE (4, 6); - ASM_VOLATILE_CASE (5, 6); - ASM_VOLATILE_CASE (6, 6); - ASM_VOLATILE_CASE (7, 6); - ASM_VOLATILE_CASE (8, 6); - ASM_VOLATILE_CASE (9, 6); - ASM_VOLATILE_CASE (10, 6); - ASM_VOLATILE_CASE (11, 6); - ASM_VOLATILE_CASE (12, 6); - ASM_VOLATILE_CASE (13, 6); - ASM_VOLATILE_CASE (14, 6); - ASM_VOLATILE_CASE (15, 6); - ASM_VOLATILE_CASE (16, 6); - ASM_VOLATILE_CASE (17, 6); - ASM_VOLATILE_CASE (18, 6); - ASM_VOLATILE_CASE (19, 6); - ASM_VOLATILE_CASE (20, 6); - ASM_VOLATILE_CASE (21, 6); - ASM_VOLATILE_CASE (22, 6); - ASM_VOLATILE_CASE (23, 6); - ASM_VOLATILE_CASE (24, 6); - ASM_VOLATILE_CASE (25, 6); - ASM_VOLATILE_CASE (26, 6); - ASM_VOLATILE_CASE (27, 6); - ASM_VOLATILE_CASE (28, 6); - ASM_VOLATILE_CASE (29, 6); - ASM_VOLATILE_CASE (30, 6); - ASM_VOLATILE_CASE (31, 6); - default: - break; - } - break; - case 7: - /* __asm__("dmfc0 %0, $1, 0" :"=r" (x)); */ - switch (rd) { - ASM_VOLATILE_CASE (0, 7); - ASM_VOLATILE_CASE (1, 7); - ASM_VOLATILE_CASE (2, 7); - ASM_VOLATILE_CASE (3, 7); - ASM_VOLATILE_CASE (4, 7); - ASM_VOLATILE_CASE (5, 7); - ASM_VOLATILE_CASE (6, 7); - ASM_VOLATILE_CASE (7, 7); - ASM_VOLATILE_CASE (8, 7); - ASM_VOLATILE_CASE (9, 7); - ASM_VOLATILE_CASE (10, 7); - ASM_VOLATILE_CASE (11, 7); - ASM_VOLATILE_CASE (12, 7); - ASM_VOLATILE_CASE (13, 7); - ASM_VOLATILE_CASE (14, 7); - ASM_VOLATILE_CASE (15, 7); - ASM_VOLATILE_CASE (16, 7); - ASM_VOLATILE_CASE (17, 7); - ASM_VOLATILE_CASE (18, 7); - ASM_VOLATILE_CASE (19, 7); - ASM_VOLATILE_CASE (20, 7); - ASM_VOLATILE_CASE (21, 7); - ASM_VOLATILE_CASE (22, 7); - ASM_VOLATILE_CASE (23, 7); - ASM_VOLATILE_CASE (24, 7); - ASM_VOLATILE_CASE (25, 7); - ASM_VOLATILE_CASE (26, 7); - ASM_VOLATILE_CASE (27, 7); - ASM_VOLATILE_CASE (28, 7); - ASM_VOLATILE_CASE (29, 7); - ASM_VOLATILE_CASE (30, 7); - ASM_VOLATILE_CASE (31, 7); - default: - break; - } - break; - - default: - break; - } -#endif - return x; -} - #if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev >= 2)) UInt mips32_dirtyhelper_rdhwr ( UInt rt, UInt rd ) { diff --git a/VEX/priv/guest_mips_toIR.c b/VEX/priv/guest_mips_toIR.c index aaa07fa08d..2d0a2df162 100644 --- a/VEX/priv/guest_mips_toIR.c +++ b/VEX/priv/guest_mips_toIR.c @@ -13392,33 +13392,6 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *, } } break; /* COP1 */ - case 0x10: /* COP0 */ - if (rs == 0) { /* MFC0 */ - DIP("mfc0 r%u, r%u, %u", rt, rd, sel); - IRTemp val = newTemp(Ity_I32); - IRExpr** args = mkIRExprVec_3 (IRExpr_BBPTR(), mkU32(rd), mkU32(sel)); - IRDirty *d = unsafeIRDirty_1_N(val, - 0, - "mips32_dirtyhelper_mfc0", - &mips32_dirtyhelper_mfc0, - args); - stmt(IRStmt_Dirty(d)); - putIReg(rt, mkexpr(val)); - } else if (rs == 1) { - /* Doubleword Move from Coprocessor 0 - DMFC0; MIPS64 */ - DIP("dmfc0 r%u, r%u, %u", rt, rd, sel); - IRTemp val = newTemp(Ity_I64); - IRExpr** args = mkIRExprVec_3 (IRExpr_BBPTR(), mkU64(rd), mkU64(sel)); - IRDirty *d = unsafeIRDirty_1_N(val, - 0, - "mips64_dirtyhelper_dmfc0", - &mips64_dirtyhelper_dmfc0, - args); - stmt(IRStmt_Dirty(d)); - putDReg(rt, mkexpr(val)); - } else - goto decode_failure; - break; case 0x31: /* LWC1 */ /* Load Word to Floating Point - LWC1 (MIPS32) */ -- 2.47.2