1233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan; Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan; that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan; tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan; in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan; be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan .globl vp8_sad16x16_ppc 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan .globl vp8_sad16x8_ppc 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan .globl vp8_sad8x16_ppc 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan .globl vp8_sad8x8_ppc 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan .globl vp8_sad4x4_ppc 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro load_aligned_16 V R O 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvsl v3, 0, \R ;# permutate value for alignment 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v1, 0, \R 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v2, \O, \R 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan vperm \V, v1, v2, v3 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro prologue 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan mfspr r11, 256 ;# get old VRSAVE 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan oris r12, r11, 0xffc0 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtspr 256, r12 ;# set VRSAVE 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan stwu r1, -32(r1) ;# create space on the stack 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan li r10, 16 ;# load offset and loop counter 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan vspltisw v8, 0 ;# zero out total to start 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro epilogue 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan addi r1, r1, 32 ;# recover stack 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtspr 256, r11 ;# reset old VRSAVE 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro SAD_16 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# v6 = abs (v4 - v5) 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v6, v4, v5 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v7, v5, v4 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan vor v6, v6, v7 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# v8 += abs (v4 - v5) 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsum4ubs v8, v6, v8 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 54233d2500723e5594f3e7c70896ffeeef32b9c950ywan 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro sad_16_loop loop_label 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvsl v3, 0, r5 ;# only needs to be done once per block 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# preload a line of data before getting into the loop 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v4, 0, r3 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v1, 0, r5 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v2, r10, r5 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r5, r5, r6 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r3, r3, r4 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan vperm v5, v1, v2, v3 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 4 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan\loop_label: 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# compute difference on first row 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v6, v4, v5 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v7, v5, v4 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# load up next set of data 75233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v9, 0, r3 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v1, 0, r5 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v2, r10, r5 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan 79233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# perform abs() of difference 80233d2500723e5594f3e7c70896ffeeef32b9c950ywan vor v6, v6, v7 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r3, r3, r4 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# add to the running tally 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsum4ubs v8, v6, v8 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# now onto the next line 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan vperm v5, v1, v2, v3 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r5, r5, r6 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v4, 0, r3 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan 91233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# compute difference on second row 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v6, v9, v5 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v1, 0, r5 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v7, v5, v9 95233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v2, r10, r5 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan vor v6, v6, v7 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r3, r3, r4 98233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsum4ubs v8, v6, v8 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan vperm v5, v1, v2, v3 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r5, r5, r6 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan bdnz \loop_label 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan 104233d2500723e5594f3e7c70896ffeeef32b9c950ywan vspltisw v7, 0 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsumsws v8, v8, v7 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan stvx v8, 0, r1 109233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r3, 12(r1) 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 111233d2500723e5594f3e7c70896ffeeef32b9c950ywan 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro sad_8_loop loop_label 113233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 4 114233d2500723e5594f3e7c70896ffeeef32b9c950ywan\loop_label: 115233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# only one of the inputs should need to be aligned. 116233d2500723e5594f3e7c70896ffeeef32b9c950ywan load_aligned_16 v4, r3, r10 117233d2500723e5594f3e7c70896ffeeef32b9c950ywan load_aligned_16 v5, r5, r10 118233d2500723e5594f3e7c70896ffeeef32b9c950ywan 119233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# move onto the next line 120233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r3, r3, r4 121233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r5, r5, r6 122233d2500723e5594f3e7c70896ffeeef32b9c950ywan 123233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# only one of the inputs should need to be aligned. 124233d2500723e5594f3e7c70896ffeeef32b9c950ywan load_aligned_16 v6, r3, r10 125233d2500723e5594f3e7c70896ffeeef32b9c950ywan load_aligned_16 v7, r5, r10 126233d2500723e5594f3e7c70896ffeeef32b9c950ywan 127233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# move onto the next line 128233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r3, r3, r4 129233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r5, r5, r6 130233d2500723e5594f3e7c70896ffeeef32b9c950ywan 131233d2500723e5594f3e7c70896ffeeef32b9c950ywan vmrghb v4, v4, v6 132233d2500723e5594f3e7c70896ffeeef32b9c950ywan vmrghb v5, v5, v7 133233d2500723e5594f3e7c70896ffeeef32b9c950ywan 134233d2500723e5594f3e7c70896ffeeef32b9c950ywan SAD_16 135233d2500723e5594f3e7c70896ffeeef32b9c950ywan 136233d2500723e5594f3e7c70896ffeeef32b9c950ywan bdnz \loop_label 137233d2500723e5594f3e7c70896ffeeef32b9c950ywan 138233d2500723e5594f3e7c70896ffeeef32b9c950ywan vspltisw v7, 0 139233d2500723e5594f3e7c70896ffeeef32b9c950ywan 140233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsumsws v8, v8, v7 141233d2500723e5594f3e7c70896ffeeef32b9c950ywan 142233d2500723e5594f3e7c70896ffeeef32b9c950ywan stvx v8, 0, r1 143233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r3, 12(r1) 144233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 145233d2500723e5594f3e7c70896ffeeef32b9c950ywan 146233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 2 147233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 unsigned char *src_ptr 148233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r4 int src_stride 149233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r5 unsigned char *ref_ptr 150233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r6 int ref_stride 151233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# 152233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 return value 153233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_sad16x16_ppc: 154233d2500723e5594f3e7c70896ffeeef32b9c950ywan 155233d2500723e5594f3e7c70896ffeeef32b9c950ywan prologue 156233d2500723e5594f3e7c70896ffeeef32b9c950ywan 157233d2500723e5594f3e7c70896ffeeef32b9c950ywan li r9, 8 158233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtctr r9 159233d2500723e5594f3e7c70896ffeeef32b9c950ywan 160233d2500723e5594f3e7c70896ffeeef32b9c950ywan sad_16_loop sad16x16_loop 161233d2500723e5594f3e7c70896ffeeef32b9c950ywan 162233d2500723e5594f3e7c70896ffeeef32b9c950ywan epilogue 163233d2500723e5594f3e7c70896ffeeef32b9c950ywan 164233d2500723e5594f3e7c70896ffeeef32b9c950ywan blr 165233d2500723e5594f3e7c70896ffeeef32b9c950ywan 166233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 2 167233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 unsigned char *src_ptr 168233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r4 int src_stride 169233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r5 unsigned char *ref_ptr 170233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r6 int ref_stride 171233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# 172233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 return value 173233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_sad16x8_ppc: 174233d2500723e5594f3e7c70896ffeeef32b9c950ywan 175233d2500723e5594f3e7c70896ffeeef32b9c950ywan prologue 176233d2500723e5594f3e7c70896ffeeef32b9c950ywan 177233d2500723e5594f3e7c70896ffeeef32b9c950ywan li r9, 4 178233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtctr r9 179233d2500723e5594f3e7c70896ffeeef32b9c950ywan 180233d2500723e5594f3e7c70896ffeeef32b9c950ywan sad_16_loop sad16x8_loop 181233d2500723e5594f3e7c70896ffeeef32b9c950ywan 182233d2500723e5594f3e7c70896ffeeef32b9c950ywan epilogue 183233d2500723e5594f3e7c70896ffeeef32b9c950ywan 184233d2500723e5594f3e7c70896ffeeef32b9c950ywan blr 185233d2500723e5594f3e7c70896ffeeef32b9c950ywan 186233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 2 187233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 unsigned char *src_ptr 188233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r4 int src_stride 189233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r5 unsigned char *ref_ptr 190233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r6 int ref_stride 191233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# 192233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 return value 193233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_sad8x16_ppc: 194233d2500723e5594f3e7c70896ffeeef32b9c950ywan 195233d2500723e5594f3e7c70896ffeeef32b9c950ywan prologue 196233d2500723e5594f3e7c70896ffeeef32b9c950ywan 197233d2500723e5594f3e7c70896ffeeef32b9c950ywan li r9, 8 198233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtctr r9 199233d2500723e5594f3e7c70896ffeeef32b9c950ywan 200233d2500723e5594f3e7c70896ffeeef32b9c950ywan sad_8_loop sad8x16_loop 201233d2500723e5594f3e7c70896ffeeef32b9c950ywan 202233d2500723e5594f3e7c70896ffeeef32b9c950ywan epilogue 203233d2500723e5594f3e7c70896ffeeef32b9c950ywan 204233d2500723e5594f3e7c70896ffeeef32b9c950ywan blr 205233d2500723e5594f3e7c70896ffeeef32b9c950ywan 206233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 2 207233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 unsigned char *src_ptr 208233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r4 int src_stride 209233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r5 unsigned char *ref_ptr 210233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r6 int ref_stride 211233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# 212233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 return value 213233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_sad8x8_ppc: 214233d2500723e5594f3e7c70896ffeeef32b9c950ywan 215233d2500723e5594f3e7c70896ffeeef32b9c950ywan prologue 216233d2500723e5594f3e7c70896ffeeef32b9c950ywan 217233d2500723e5594f3e7c70896ffeeef32b9c950ywan li r9, 4 218233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtctr r9 219233d2500723e5594f3e7c70896ffeeef32b9c950ywan 220233d2500723e5594f3e7c70896ffeeef32b9c950ywan sad_8_loop sad8x8_loop 221233d2500723e5594f3e7c70896ffeeef32b9c950ywan 222233d2500723e5594f3e7c70896ffeeef32b9c950ywan epilogue 223233d2500723e5594f3e7c70896ffeeef32b9c950ywan 224233d2500723e5594f3e7c70896ffeeef32b9c950ywan blr 225233d2500723e5594f3e7c70896ffeeef32b9c950ywan 226233d2500723e5594f3e7c70896ffeeef32b9c950ywan.macro transfer_4x4 I P 227233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r0, 0(\I) 228233d2500723e5594f3e7c70896ffeeef32b9c950ywan add \I, \I, \P 229233d2500723e5594f3e7c70896ffeeef32b9c950ywan 230233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r7, 0(\I) 231233d2500723e5594f3e7c70896ffeeef32b9c950ywan add \I, \I, \P 232233d2500723e5594f3e7c70896ffeeef32b9c950ywan 233233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r8, 0(\I) 234233d2500723e5594f3e7c70896ffeeef32b9c950ywan add \I, \I, \P 235233d2500723e5594f3e7c70896ffeeef32b9c950ywan 236233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r9, 0(\I) 237233d2500723e5594f3e7c70896ffeeef32b9c950ywan 238233d2500723e5594f3e7c70896ffeeef32b9c950ywan stw r0, 0(r1) 239233d2500723e5594f3e7c70896ffeeef32b9c950ywan stw r7, 4(r1) 240233d2500723e5594f3e7c70896ffeeef32b9c950ywan stw r8, 8(r1) 241233d2500723e5594f3e7c70896ffeeef32b9c950ywan stw r9, 12(r1) 242233d2500723e5594f3e7c70896ffeeef32b9c950ywan.endm 243233d2500723e5594f3e7c70896ffeeef32b9c950ywan 244233d2500723e5594f3e7c70896ffeeef32b9c950ywan .align 2 245233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 unsigned char *src_ptr 246233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r4 int src_stride 247233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r5 unsigned char *ref_ptr 248233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r6 int ref_stride 249233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# 250233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 return value 251233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_sad4x4_ppc: 252233d2500723e5594f3e7c70896ffeeef32b9c950ywan 253233d2500723e5594f3e7c70896ffeeef32b9c950ywan prologue 254233d2500723e5594f3e7c70896ffeeef32b9c950ywan 255233d2500723e5594f3e7c70896ffeeef32b9c950ywan transfer_4x4 r3, r4 256233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v4, 0, r1 257233d2500723e5594f3e7c70896ffeeef32b9c950ywan 258233d2500723e5594f3e7c70896ffeeef32b9c950ywan transfer_4x4 r5, r6 259233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v5, 0, r1 260233d2500723e5594f3e7c70896ffeeef32b9c950ywan 261233d2500723e5594f3e7c70896ffeeef32b9c950ywan vspltisw v8, 0 ;# zero out total to start 262233d2500723e5594f3e7c70896ffeeef32b9c950ywan 263233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# v6 = abs (v4 - v5) 264233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v6, v4, v5 265233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsububs v7, v5, v4 266233d2500723e5594f3e7c70896ffeeef32b9c950ywan vor v6, v6, v7 267233d2500723e5594f3e7c70896ffeeef32b9c950ywan 268233d2500723e5594f3e7c70896ffeeef32b9c950ywan ;# v8 += abs (v4 - v5) 269233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsum4ubs v7, v6, v8 270233d2500723e5594f3e7c70896ffeeef32b9c950ywan vsumsws v7, v7, v8 271233d2500723e5594f3e7c70896ffeeef32b9c950ywan 272233d2500723e5594f3e7c70896ffeeef32b9c950ywan stvx v7, 0, r1 273233d2500723e5594f3e7c70896ffeeef32b9c950ywan lwz r3, 12(r1) 274233d2500723e5594f3e7c70896ffeeef32b9c950ywan 275233d2500723e5594f3e7c70896ffeeef32b9c950ywan epilogue 276233d2500723e5594f3e7c70896ffeeef32b9c950ywan 277233d2500723e5594f3e7c70896ffeeef32b9c950ywan blr 278