diff --git a/ppc64/ppc64asm/objdump_test.go b/ppc64/ppc64asm/objdump_test.go
index 5d48619..32340b6 100644
--- a/ppc64/ppc64asm/objdump_test.go
+++ b/ppc64/ppc64asm/objdump_test.go
@@ -17,7 +17,7 @@
 // generates lots of ppc64x instructions not possible with golang so not worth supporting..
 //func TestObjdumpPowerRandom(t *testing.T)   { testObjdump(t, randomCases(t)) }
 
-// objdumpManualTests holds test cases that will be run by TestObjdumpARMManual.
+// objdumpManualTests holds test cases that will be run by TestObjdumpPowerManual.
 // If you are debugging a few cases that turned up in a longer run, it can be useful
 // to list them here and then use -run=Manual, particularly with tracing enabled.
 // Note that these are byte sequences, so they must be reversed from the usual
@@ -31,38 +31,19 @@
 // allowedMismatchObjdump reports whether the mismatch between text and dec
 // should be allowed by the test.
 func allowedMismatchObjdump(text string, size int, inst *Inst, dec ExtInst) bool {
-	if hasPrefix(dec.text, deleted...) {
-		return true
-	}
-
 	// we support more instructions than binutils
 	if strings.Contains(dec.text, ".long") {
 		return true
 	}
 
-	if hasPrefix(text, "error:") {
-		if hasPrefix(dec.text, unsupported...) {
-			return true
-		}
-	}
-
 	switch inst.Op {
-	case BC, BCA, BL, BLA, BCL, BCLA, TDI, TWI, TW, TD:
-		return true // TODO(minux): we lack the support for extended opcodes here
-	case RLWNM, RLWNMCC, RLDICL, RLDICLCC, RLWINM, RLWINMCC, RLDCL, RLDCLCC:
-		return true // TODO(minux): we lack the support for extended opcodes here
-	case DCBTST, DCBT:
-		return true // objdump uses the embedded argument order, we use the server argument order
-	case MTFSF, MTFSFCC: // objdump doesn't show the last two arguments
+	case BC: // We don't print PC relative branches the same way.
 		return true
-	case VSPLTB, VSPLTH, VSPLTW: // objdump generates unreasonable result "vspltw v6,v19,4" for 10c49a8c, the last 4 should be 0.
+	case DCBF, DCBT: // We only support extended mnemonics, and may not print 0 where R0 == 0.
 		return true
 	case MTVSRWA, MTVSRWZ, MFVSRWZ, MFVSRD, MTVSRD: // We don't support extended mnemonics using VRs or FPRs
 		return true
 	}
-	if hasPrefix(text, "evm", "evl", "efs") { // objdump will disassemble them wrong (e.g. evmhoumia as vsldoi)
-		return true
-	}
 
 	if len(dec.enc) >= 4 {
 		_ = binary.BigEndian.Uint32(dec.enc[:4])
@@ -70,66 +51,3 @@
 
 	return false
 }
-
-// Instructions known to libopcodes (or xed) but not to us.
-// TODO(minux): those single precision instructions are missing from ppc64.csv
-// those data cache instructions are deprecated, but must be treated as no-ops, see 4.3.2.1 pg. 774.
-var unsupported = strings.Fields(`
-fmsubs
-fmsubs.
-fnmadds
-fnmadds.
-fnmsubs
-fnmsubs.
-fmuls
-fmuls.
-fdivs
-fdivs.
-fadds
-fadds.
-fsubs
-fsubs.
-dst
-dstst
-dssall
-`)
-
-// Instructions explicitly dropped in Power ISA that were in POWER architecture.
-// See A.30 Deleted Instructions and A.31 Discontiued Opcodes
-var deleted = strings.Fields(`
-abs
-clcs
-clf
-cli
-dclst
-div
-divs
-doz
-dozi
-lscbx
-maskg
-maskir
-mfsri
-mul
-nabs
-rac
-rfi
-rfsvc
-rlmi
-rrib
-sle
-sleq
-sliq
-slliq
-sllq
-slq
-sraiq
-sraq
-sre
-srea
-sreq
-sriq
-srliq
-srlq
-srq
-maskg`)
