/*
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* The contents of this file constitute Original Code as defined in and
* are subject to the Apple Public Source License Version 1.1 (the
* "License"). You may not use this file except in compliance with the
* License. Please obtain a copy of the License at
* http://www.apple.com/publicsource and read it before using this file.
*
* This Original Code and all software distributed under the License are
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
* License for the specific language governing rights and limitations
* under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/*
* @OSF_COPYRIGHT@
*/
#define __APPLE_API_PRIVATE
#include <cpus.h>
#include <mach_kdb.h>
#include <mach_kdp.h>
#include <mach_kgdb.h>
#include <ppc/asm.h>
#include <ppc/proc_reg.h>
#include <ppc/spec_reg.h>
#include <machine/cpu_capabilities.h>
#include <mach/ppc/vm_param.h>
#include <assym.s>
#define ptFilter 0
#define ptVersion 4
#define ptRevision 6
#define ptFeatures 8
#define ptCPUCap 12
#define ptPwrModes 16
#define ptPatch 20
#define ptInitRout 24
#define ptRptdProc 28
#define ptTempMax 32
#define ptTempThr 36
#define ptLineSize 40
#define ptl1iSize 44
#define ptl1dSize 48
#define ptPTEG 52
#define ptMaxVAddr 56
#define ptMaxPAddr 60
#define ptSize 64
#define bootCPU 10
#define firstInit 9
#define firstBoot 8
/*
* Interrupt and bootup stack for initial processor
*/
.file "start.s"
/*
* All CPUs start here.
*
* This code is called from SecondaryLoader
*
* Various arguments are passed via a table:
* R3 = pointer to other startup parameters
*/
.text
ENTRY(resetPOR,TAG_NO_FRAME_USED)
li r12,0 mtmsrd r12 lwz r3,0xF4(0)
ENTRY(_start_cpu,TAG_NO_FRAME_USED)
crclr bootCPU mr r30,r3 lwz r15,ruptStamp(r3) lwz r16,ruptStamp+4(r3) mtspr tbu,r15 b allstart
ENTRY(_start,TAG_NO_FRAME_USED)
startJoin:
mflr r2 ori r30,r30,lo16(EXT(per_proc_info))
lwz r17,pfAvailable(r30) crmove firstInit,cr0_eq
lis r20,HIGH_ADDR(fwdisplock) ori r20,r20,LOW_ADDR(fwdisplock)
allstart:
mr r31,r3 crand firstBoot,bootCPU,firstInit mtsprg 0,r30 li r9,0 mtsprg 2,r9
mtsprg 3,r9
li r7,MSR_VM_OFF isync
lis r26,hi16(processor_types) mfpvr r10 nextPVR: lwz r28,ptFilter(r26) and r28,r10,r28 beq donePVR b nextPVR donePVR: lwz r20,ptInitRout(r26)
bf firstBoot,notFirst ori r18,r18,lo16(EXT(_cpu_capabilities))
lwz r17,ptCPUCap(r26)
lwz r17,ptFeatures(r26) lwz r18,ptRptdProc(r26)
lwz r13,ptPwrModes(r26)
lwz r13,ptTempMax(r26) lwz r13,ptTempThr(r26)
lwz r13,ptLineSize(r26) lwz r13,ptl1iSize(r26) lwz r13,ptl1dSize(r26) lwz r13,ptPTEG(r26) lwz r13,ptMaxVAddr(r26) lwz r13,ptMaxPAddr(r26) lis r11,hi16(EXT(patch_table))
ori r11,r11,lo16(EXT(patch_table))
lwz r19,ptPatch(r26) mtctr r12
patch_loop:
lwz r16,patchType(r11) cmplwi cr1,r16,PATCH_FEATURE crandc cr0_eq,cr1_eq,cr0_eq cmplwi cr1,r16,PATCH_PROCESSOR crand cr0_eq,cr1_eq,cr0_eq patch_apply:
lwz r13,patchAddr(r11) stw r14,0(r13) sync isync patch_skip:
addi r11,r11,peSize b doOurInit notFirst: lwz r17,pfAvailable(r30) doOurInit: mr. r20,r20 bnelrl ori r17,r17,lo16(pfValid)
bf firstBoot,nofeatcpy li r2,NCPUS ori r23,r23,lo16(EXT(per_proc_info))
cpyFCpu: addic. r2,r2,-1 la r7,pfAvailable(r6) ble-- nofeatcpy cpyFeat: subi r9,r9,1 stw r0,0(r7) addi r7,r7,4 bgt cpyFeat lwz r17,pfAvailable(r6) b cpyFCpu
nofeatcpy: rlwinm. r0,r17,0,pf64Bitb,pf64Bitb
bne++ start64 mfspr r6,hid0 mtspr hid0,r6
li r9,0 isync
mtdbatu 0,r9 mtdbatu 1,r9 mtdbatu 2,r9 mtdbatu 3,r9 sync
isync
mtibatu 0,r9 mtibatu 1,r9 mtibatu 2,r9 mtibatu 3,r9 sync
isync
b startcommon start64: lis r5,hi16(startcommon) ori r5,r5,lo16(startcommon) lis r20,hi16(dozem|napm|sleepm) sldi r9,r9,32 or r9,r9,r7 isync
mtspr hid0,r6 mfspr r6,hid0 mfspr r6,hid0 mfspr r6,hid0 mtsrr0 r5 rfid .align 5
startcommon:
rlwinm. r0,r17,0,pfFloatb,pfFloatb
li r0,MSR_VM_OFF|MASK(MSR_FP) isync
lis r5,HIGH_ADDR(EXT(FloatInit)) /* Get top of floating point init value */
ori r5,r5,LOW_ADDR(EXT(FloatInit)) /* Slam bottom */
lfd f0,0(r5) /* Initialize FP0 */
fmr f1,f0 /* Ours in not */
fmr f2,f0 /* to wonder why, */
fmr f3,f0 /* ours is but to */
fmr f4,f0 /* do or die! */
fmr f5,f0
fmr f6,f0
fmr f7,f0
fmr f8,f0
fmr f9,f0
fmr f10,f0
fmr f11,f0
fmr f12,f0
fmr f13,f0
fmr f14,f0
fmr f15,f0
fmr f16,f0
fmr f17,f0
fmr f18,f0
fmr f19,f0
fmr f20,f0
fmr f21,f0
fmr f22,f0
fmr f23,f0
fmr f24,f0
fmr f25,f0
fmr f26,f0
fmr f27,f0
fmr f28,f0
fmr f29,f0
fmr f30,f0
fmr f31,f0
li r0, MSR_VM_OFF isync
noFloat: rlwinm. r0,r17,0,pfAltivecb,pfAltivecb
li r0,0 lis r7,hi16(MSR_VEC_ON) mtmsr r7
lis r5,hi16(EXT(QNaNbarbarian))
mtspr vrsave,r0 vspltish v1,1 vxor v1,v1,v0 mtvscr v1 vor v1,v0,v0 vor v4,v0,v0 vor v6,v0,v0 vor v8,v0,v0 vor v10,v0,v0 vor v12,v0,v0 vor v14,v0,v0 vor v16,v0,v0 vor v18,v0,v0 vor v20,v0,v0 vor v22,v0,v0 vor v24,v0,v0 vor v26,v0,v0 vor v28,v0,v0 vor v30,v0,v0
li r0, MSR_VM_OFF isync
noVector: rlwinm. r0,r17,0,pfSMPcapb,pfSMPcapb
lhz r13,PP_CPU_NUMBER(r30)
noSMP: rlwinm. r0,r17,0,pfThermalb,pfThermalb
li r13,0 li r13,lo16(thrmtidm|thrmvm) lis r13,hi16(thrmthrm) mtspr thrm2,r13 noThermometer:
bl EXT(cacheInit) rlwinm. r0,r17,0,pf64Bitb,pf64Bitb
mfmsr r29 mtmsrd r29
isnot64: bf bootCPU,callcpu
lis r29,HIGH_ADDR(EXT(intstack_top_ss)) lwz r29,0(r29)
li r28,0
stw r28,FM_BACKPTR(r29) mr r1,r29
mr r3,r31 bl EXT(ppc_init)
callcpu:
lwz r29,PP_INTSTACK_TOP_SS(r31) li r28,0
stw r28,FM_BACKPTR(r29)
mr r1,r29
bl EXT(ppc_init_cpu)
init750:
bf firstBoot, init750nb mfspr r13,l2cr bne+ i750hl2
i750hl2:
lis r14,hi16(256*1024) rlwinm r15,r15,4,30,31 slw r14,r14,r15
stw r13,pfl2crOriginal(r30) stw r14,pfl2Size(r30)
init750l2none:
rlwinm r17,r17,0,pfL2b+1,pfL2b-1 init750l2done:
mfspr r11,hid0 blr init750nb:
lwz r11,pfHID0(r30) mtspr hid0,r11 sync
blr
init750CX:
bf firstBoot, init750 li r14,lo16(0xFD5F) slw r14,r14,r13 b init750
init750FX:
bf firstBoot, init750FXnb
mfspr r11, hid1
stw r11, pfHID1(r30)
init750FXnb:
lwz r13, pfHID0(r30)
rlwinm. r0, r11, 0, hid1ps, hid1ps rlwinm r13, r13, 0, btic+1, btic-1 init750FXnb2:
sync
mtspr hid0, r13 sync
rlwinm r12, r11, 0, hid1ps+1, hid1ps-1 mftb r13 init750FXnbloop:
mftb r14
sub r14, r14, r13
cmpli cr0, r14, 5000
ble init750FXnbloop
mtspr hid1, r11
bf firstBoot, init750FXV2nb mfspr r11, hid2
stw r11, pfHID2(r30)
init750FXV2nb:
lwz r13, pfHID2(r30) mtspr hid2, r13 b init750FX
init7400: bf firstBoot,i7400nb rlwinm. r0,r13,0,l2e,l2e rlwinm r17,r17,0,pfL2b+1,pfL2b-1 i7400hl2: lis r14,hi16(256*1024) rlwinm r15,r15,4,30,31
slw r14,r14,r15 stw r13,pfl2crOriginal(r30) stw r14,pfl2Size(r30) mfspr r11,hid0 mtspr hid0,r11 stw r11,pfHID0(r30) mfspr r11,msscr0 mfspr r11,msscr1 blr i7400nb:
li r11,0
mtspr l2cr,r11 sync
mtspr hid0,r11 sync
lwz r11,pfMSSCR0(r30) sync
mtspr msscr0,r11 isync
sync
mtspr msscr1,r11 sync
blr
init7400v2_7:
bf firstBoot, init7400
mfspr r13, hid0 mtspr hid0, r13 sync
b init7400
init7410: li r13,0 b init7400
init745X:
bf firstBoot,init745Xnb mfspr r13,l2cr bne+ init745Xhl2
init745Xhl2:
mfpvr r14 cmpli cr0, r14, PROCESSOR_VERSION_7457 cror cr0_eq, cr1_eq, cr0_eq
lis r14,hi16(512*1024)
lis r14,hi16(256*1024) add r14,r14,r15 init745Xhl2_2:
stw r13,pfl2crOriginal(r30) stw r14,pfl2Size(r30) mfspr r13,l3cr bne+ init745Xhl3
init745Xhl3: cmplwi cr0,r13,0 lis r14,hi16(1024*1024) slw r14,r14,r15 stw r13,pfl3crOriginal(r30) stw r14,pfl3Size(r30)
init745Xnone:
rlwinm r17,r17,0,pfL3fab+1,pfL3b-1 or r17,r17,r11
init745Xfin:
rlwinm r17,r17,0,pfWillNapb+1,pfWillNapb-1 mfspr r11,hid0 mfspr r11,hid1 mfspr r11,msscr0 mfspr r11,msscr1 mfspr r11,ictrl mfspr r11,ldstcr mfspr r11,ldstdb mfspr r11,pir blr
init745Xnb: lwz r11,pfHID0(r30) mtspr hid0,r11 lwz r11,pfHID1(r30) mtspr hid1,r11 lwz r11,pfMSSCR0(r30) mtspr msscr0,r11 sync
lwz r11,pfICTRL(r30) mtspr ictrl,r11 sync
lwz r11,pfLDSTCR(r30) mtspr ldstcr,r11 sync
lwz r11,pfLDSTDB(r30) mtspr ldstdb,r11 sync
blr
init7450:
bf firstBoot, init745X mfspr r13, pir bne init7450done ori r13, r13, 0x0400
init7450done:
b init745X
init970:
li r20,0 bf firstBoot,init970nb
mfspr r11,hid0 mfspr r11,hid1 mfspr r11,hid4 mfspr r11,hid5
lis r0,0x8000 stw r0,pfl2cr(r30) stw r0,pfl2Size(r30) blr
init970nb: ld r11,pfHID0(r30) mtspr hid0,r11 mfspr r11,hid0 mfspr r11,hid0 mfspr r11,hid0
ld r11,pfHID1(r30) mtspr hid1,r11 isync
ld r11,pfHID4(r30) mtspr hid4,r11
ld r11,pfHID5(r30) isync
blr
mtlr r2
.align 2
processor_types:
.align 2
.long 0xFFFFFFFF .short 0x4202
.long pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL2
.long kCache32 | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init750
.long CPU_SUBTYPE_POWERPC_750
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32
.align 2
.long 0xFFFF0F00 .short 0x0200
.long pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL2
.long kCache32 | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init750CX
.long CPU_SUBTYPE_POWERPC_750
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL2
.long kCache32 | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init750
.long CPU_SUBTYPE_POWERPC_750
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32
.align 2
.long 0xFFFF0F00 .short 0x0100
.long pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfSlowNap | pfNoMuMMCK | pf32Byte | pfL2
.long kCache32 | kHasGraphicsOps | kHasStfiwx
.long pmDualPLL
.long PatchExt32
.long init750FX
.long CPU_SUBTYPE_POWERPC_750
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfSlowNap | pfNoMuMMCK | pf32Byte | pfL2
.long kCache32 | kHasGraphicsOps | kHasStfiwx
.long pmDualPLL | pmDPLLVmin
.long PatchExt32
.long init750FXV2
.long CPU_SUBTYPE_POWERPC_750
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32
.align 2
.long 0xFFFFFFF8 .short 0x0200
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7400v2_7
.long CPU_SUBTYPE_POWERPC_7400
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7400
.long CPU_SUBTYPE_POWERPC_7400
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFFFFFF .short 0x1101
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7410
.long CPU_SUBTYPE_POWERPC_7400
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7410
.long CPU_SUBTYPE_POWERPC_7400
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFFFF00 .short 0x0100
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7450
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFFFFFF .short 0x0200
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7450
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfWillNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init7450
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFFFF00 .short 0x0100
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init745X
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFFFFFF .short 0x0200
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfWillNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init745X
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init745X
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long init745X
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
.long kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
.long pmDFS
.long PatchExt32
.long init745X
.long CPU_SUBTYPE_POWERPC_7450
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 36
.align 2
.long 0xFFFFFF00 .short 0x1100
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2
.long kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
.long pmPowerTune
.long PatchLwsync
.long init970
.long CPU_SUBTYPE_POWERPC_970
.long 105
.long 90
.long 128
.long 64*1024
.long 32*1024
.long 128
.long 65
.long 42
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2 | pfSCOMFixUp
.long kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
.long 0
.long PatchLwsync
.long init970
.long CPU_SUBTYPE_POWERPC_970
.long 105
.long 90
.long 128
.long 64*1024
.long 32*1024
.long 128
.long 65
.long 42
.align 2
.long 0xFFFF0000 .short 0
.long pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2
.long kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
.long pmPowerTune
.long PatchLwsync
.long init970
.long CPU_SUBTYPE_POWERPC_970
.long 105
.long 90
.long 128
.long 64*1024
.long 32*1024
.long 128
.long 65
.long 42
.align 2
.long 0x00000000 .short 0
.long pfFloat | pf32Byte
.long kCache32 | kHasGraphicsOps | kHasStfiwx
.long 0
.long PatchExt32
.long initUnsupported
.long CPU_SUBTYPE_POWERPC_ALL
.long 105
.long 90
.long 32
.long 32*1024
.long 32*1024
.long 64
.long 52
.long 32