File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
147193void get_architecture (void ){
You can’t perform that action at this time.
0 commit comments