Skip to content

Commit e71d70b

Browse files
authored
Merge pull request #1681 from martin-frbg/issue1671
Add cpu identification via mfpvr call for the BSDs
2 parents d671870 + 8d5b33b commit e71d70b

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

cpuid_power.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,52 @@ int detect(void){
142142

143143
return CPUTYPE_PPC970;
144144
#endif
145+
146+
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
147+
int id;
148+
id = __asm __volatile("mfpvr %0" : "=r"(id));
149+
switch ( id >> 16 ) {
150+
case 0x4e: // POWER9
151+
return return CPUTYPE_POWER8;
152+
break;
153+
case 0x4d:
154+
case 0x4b: // POWER8/8E
155+
return CPUTYPE_POWER8;
156+
break;
157+
case 0x4a:
158+
case 0x3f: // POWER7/7E
159+
return CPUTYPE_POWER6;
160+
break;
161+
case 0x3e:
162+
return CPUTYPE_POWER6;
163+
break;
164+
case 0x3a:
165+
return CPUTYPE_POWER5;
166+
break;
167+
case 0x35:
168+
case 0x38: // POWER4 /4+
169+
return CPUTYPE_POWER4;
170+
break;
171+
case 0x40:
172+
case 0x41: // POWER3 /3+
173+
return CPUTYPE_POWER3;
174+
break;
175+
case 0x39:
176+
case 0x3c:
177+
case 0x44:
178+
case 0x45:
179+
return CPUTYPE_PPC970;
180+
break;
181+
case 0x70:
182+
return CPUTYPE_CELL;
183+
break;
184+
case 0x8003:
185+
return CPUTYPE_PPCG4;
186+
break;
187+
default:
188+
return CPUTYPE_UNKNOWN;
189+
}
190+
#endif
145191
}
146192

147193
void get_architecture(void){

0 commit comments

Comments
 (0)