- pclose(infile);
-
- if (!strncasecmp(p, "POWER3", 6)) return CPUTYPE_POWER3;
- if (!strncasecmp(p, "POWER4", 6)) return CPUTYPE_POWER4;
- if (!strncasecmp(p, "PPC970", 6)) return CPUTYPE_PPC970;
- if (!strncasecmp(p, "POWER5", 6)) return CPUTYPE_POWER5;
- if (!strncasecmp(p, "POWER6", 6)) return CPUTYPE_POWER6;
- if (!strncasecmp(p, "POWER7", 6)) return CPUTYPE_POWER6;
- if (!strncasecmp(p, "POWER8", 6)) return CPUTYPE_POWER8;
- if (!strncasecmp(p, "POWER9", 6)) return CPUTYPE_POWER8;
- if (!strncasecmp(p, "Cell", 4)) return CPUTYPE_CELL;
- if (!strncasecmp(p, "7447", 4)) return CPUTYPE_PPCG4;
- return CPUTYPE_POWER5;
+ if (implementation >= 0x40000u) return CPUTYPE_POWER10;
+ else if (implementation & 0x20000) return CPUTYPE_POWER9;
+ else if (implementation & 0x10000) return CPUTYPE_POWER8;
+ else if (implementation & 0x08000) return CPUTYPE_POWER6; // POWER 7
+ else if (implementation & 0x04000) return CPUTYPE_POWER6;
+ else if (implementation & 0x02000) return CPUTYPE_POWER5;
+ else if (implementation & 0x01000) return CPUTYPE_POWER4; // MPC7450
+ else if (implementation & 0x00800) return CPUTYPE_POWER4;
+ else return CPUTYPE_POWER3;