12c48c7b0a453d32375a4df17e153011b797ef28csewardj 21ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--------------------------------------------------------------------*/ 31ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--- The core dispatch loop, for jumping to a code address. ---*/ 40ddf76c4dd3b66b03b04cb1bc111765a6e2bd5e6sewardj/*--- dispatch-ppc64-linux.S ---*/ 51ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--------------------------------------------------------------------*/ 62c48c7b0a453d32375a4df17e153011b797ef28csewardj 72c48c7b0a453d32375a4df17e153011b797ef28csewardj/* 82c48c7b0a453d32375a4df17e153011b797ef28csewardj This file is part of Valgrind, a dynamic binary instrumentation 92c48c7b0a453d32375a4df17e153011b797ef28csewardj framework. 102c48c7b0a453d32375a4df17e153011b797ef28csewardj 110f157ddb404bcde7815a1c5bf2d7e41c114f3d73sewardj Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk> 122c48c7b0a453d32375a4df17e153011b797ef28csewardj 132c48c7b0a453d32375a4df17e153011b797ef28csewardj This program is free software; you can redistribute it and/or 142c48c7b0a453d32375a4df17e153011b797ef28csewardj modify it under the terms of the GNU General Public License as 152c48c7b0a453d32375a4df17e153011b797ef28csewardj published by the Free Software Foundation; either version 2 of the 162c48c7b0a453d32375a4df17e153011b797ef28csewardj License, or (at your option) any later version. 172c48c7b0a453d32375a4df17e153011b797ef28csewardj 182c48c7b0a453d32375a4df17e153011b797ef28csewardj This program is distributed in the hope that it will be useful, but 192c48c7b0a453d32375a4df17e153011b797ef28csewardj WITHOUT ANY WARRANTY; without even the implied warranty of 202c48c7b0a453d32375a4df17e153011b797ef28csewardj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 212c48c7b0a453d32375a4df17e153011b797ef28csewardj General Public License for more details. 222c48c7b0a453d32375a4df17e153011b797ef28csewardj 232c48c7b0a453d32375a4df17e153011b797ef28csewardj You should have received a copy of the GNU General Public License 242c48c7b0a453d32375a4df17e153011b797ef28csewardj along with this program; if not, write to the Free Software 252c48c7b0a453d32375a4df17e153011b797ef28csewardj Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 262c48c7b0a453d32375a4df17e153011b797ef28csewardj 02111-1307, USA. 272c48c7b0a453d32375a4df17e153011b797ef28csewardj 282c48c7b0a453d32375a4df17e153011b797ef28csewardj The GNU General Public License is contained in the file COPYING. 292c48c7b0a453d32375a4df17e153011b797ef28csewardj*/ 302c48c7b0a453d32375a4df17e153011b797ef28csewardj 31582d58245637ab05272d89fb94b12fd0f18fa0f8carll#if defined(VGP_ppc64be_linux) 328b68b64759254d514d98328c496cbd88cde4c9a5njn 332c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "pub_core_basics_asm.h" 342c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "pub_core_dispatch_asm.h" 352c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "pub_core_transtab_asm.h" 362c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "libvex_guest_offsets.h" /* for OFFSET_ppc64_CIA */ 372c48c7b0a453d32375a4df17e153011b797ef28csewardj 382c48c7b0a453d32375a4df17e153011b797ef28csewardj 392c48c7b0a453d32375a4df17e153011b797ef28csewardj/* References to globals via the TOC */ 402c48c7b0a453d32375a4df17e153011b797ef28csewardj 412108204443f84bfa733397be519bdcf6810c5127cerion/* 42291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl vgPlain_tt_fast 432108204443f84bfa733397be519bdcf6810c5127cerion .lcomm vgPlain_tt_fast,4,4 442108204443f84bfa733397be519bdcf6810c5127cerion .type vgPlain_tt_fast, @object 452108204443f84bfa733397be519bdcf6810c5127cerion*/ 46291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.section ".toc","aw" 472108204443f84bfa733397be519bdcf6810c5127cerion.tocent__vgPlain_tt_fast: 482108204443f84bfa733397be519bdcf6810c5127cerion .tc vgPlain_tt_fast[TC],vgPlain_tt_fast 4996b3c209fdcededc7aece86a23c7d9af78a036e0sewardj.tocent__vgPlain_stats__n_xindirs_32: 5096b3c209fdcededc7aece86a23c7d9af78a036e0sewardj .tc vgPlain_stats__n_xindirs_32[TC],vgPlain_stats__n_xindirs_32 5196b3c209fdcededc7aece86a23c7d9af78a036e0sewardj.tocent__vgPlain_stats__n_xindir_misses_32: 5296b3c209fdcededc7aece86a23c7d9af78a036e0sewardj .tc vgPlain_stats__n_xindir_misses_32[TC],vgPlain_stats__n_xindir_misses_32 532108204443f84bfa733397be519bdcf6810c5127cerion.tocent__vgPlain_machine_ppc64_has_VMX: 542108204443f84bfa733397be519bdcf6810c5127cerion .tc vgPlain_machine_ppc64_has_VMX[TC],vgPlain_machine_ppc64_has_VMX 552c48c7b0a453d32375a4df17e153011b797ef28csewardj 562c48c7b0a453d32375a4df17e153011b797ef28csewardj/*------------------------------------------------------------*/ 571a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj/*--- ---*/ 58291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- The dispatch loop. VG_(disp_run_translations) is ---*/ 59291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- used to run all translations, ---*/ 60291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- including no-redir ones. ---*/ 611a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj/*--- ---*/ 622c48c7b0a453d32375a4df17e153011b797ef28csewardj/*------------------------------------------------------------*/ 632c48c7b0a453d32375a4df17e153011b797ef28csewardj 641ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 65291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- Entry and preamble (set everything up) ---*/ 661ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 672c48c7b0a453d32375a4df17e153011b797ef28csewardj 681ade697d13061d1abf5d74dd243e478aedabcaa6cerion/* signature: 69291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjvoid VG_(disp_run_translations)( UWord* two_words, 70291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj void* guest_state, 71291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj Addr host_addr ); 721ade697d13061d1abf5d74dd243e478aedabcaa6cerion*/ 732108204443f84bfa733397be519bdcf6810c5127cerion 741ade697d13061d1abf5d74dd243e478aedabcaa6cerion.section ".text" 751ade697d13061d1abf5d74dd243e478aedabcaa6cerion.align 2 76291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.globl VG_(disp_run_translations) 771ade697d13061d1abf5d74dd243e478aedabcaa6cerion.section ".opd","aw" 781ade697d13061d1abf5d74dd243e478aedabcaa6cerion.align 3 79291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_run_translations): 80291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.quad .VG_(disp_run_translations),.TOC.@tocbase,0 811ade697d13061d1abf5d74dd243e478aedabcaa6cerion.previous 82291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.type .VG_(disp_run_translations),@function 83291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.globl .VG_(disp_run_translations) 84291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_run_translations): 85291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r3 holds two_words */ 86291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r4 holds guest_state */ 87291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r5 holds host_addr */ 88291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 89291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* ----- entry point to VG_(disp_run_translations) ----- */ 902108204443f84bfa733397be519bdcf6810c5127cerion /* PPC64 ABI saves LR->16(prt_sp), CR->8(prt_sp)) */ 911ade697d13061d1abf5d74dd243e478aedabcaa6cerion 922108204443f84bfa733397be519bdcf6810c5127cerion /* Save lr, cr */ 93291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mflr 6 94291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 6,16(1) 95291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mfcr 6 96291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 6,8(1) 972c48c7b0a453d32375a4df17e153011b797ef28csewardj 982c48c7b0a453d32375a4df17e153011b797ef28csewardj /* New stack frame */ 992108204443f84bfa733397be519bdcf6810c5127cerion stdu 1,-624(1) /* sp should maintain 16-byte alignment */ 1002c48c7b0a453d32375a4df17e153011b797ef28csewardj 101291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* General reg save area : 152 bytes */ 102291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 31,472(1) 103291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 30,464(1) 104291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 29,456(1) 105291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 28,448(1) 106291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 27,440(1) 107291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 26,432(1) 108291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 25,424(1) 109291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 24,416(1) 110291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 23,408(1) 111291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 22,400(1) 112291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 21,392(1) 113291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 20,384(1) 114291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 19,376(1) 115291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 18,368(1) 116291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 17,360(1) 117291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 16,352(1) 118291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 15,344(1) 119291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 14,336(1) 120291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 13,328(1) 121291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 3,104(1) /* save two_words for later */ 1222c48c7b0a453d32375a4df17e153011b797ef28csewardj 123291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Save callee-saved registers... */ 1242c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Floating-point reg save area : 144 bytes */ 1252c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 31,616(1) 1262c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 30,608(1) 1272c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 29,600(1) 1282c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 28,592(1) 1292c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 27,584(1) 1302c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 26,576(1) 1312c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 25,568(1) 1322c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 24,560(1) 1332c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 23,552(1) 1342c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 22,544(1) 1352c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 21,536(1) 1362c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 20,528(1) 1372c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 19,520(1) 1382c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 18,512(1) 1392c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 17,504(1) 1402c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 16,496(1) 1412c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 15,488(1) 1422c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 14,480(1) 1432c48c7b0a453d32375a4df17e153011b797ef28csewardj 1442c48c7b0a453d32375a4df17e153011b797ef28csewardj /* It's necessary to save/restore VRSAVE in the AIX / Darwin ABI. 1452c48c7b0a453d32375a4df17e153011b797ef28csewardj The Linux kernel might not actually use VRSAVE for its intended 1462c48c7b0a453d32375a4df17e153011b797ef28csewardj purpose, but it should be harmless to preserve anyway. */ 147291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r3, r4, r5 are live here, so use r6 */ 148291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,.tocent__vgPlain_machine_ppc64_has_VMX@toc(2) 149291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,0(6) 150291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpldi 6,0 1512108204443f84bfa733397be519bdcf6810c5127cerion beq .LafterVMX1 1522c48c7b0a453d32375a4df17e153011b797ef28csewardj 1532c48c7b0a453d32375a4df17e153011b797ef28csewardj /* VRSAVE save word : 32 bytes */ 154291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mfspr 6,256 /* vrsave reg is spr number 256 */ 155291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stw 6,324(1) 1562c48c7b0a453d32375a4df17e153011b797ef28csewardj 1572c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Alignment padding : 4 bytes */ 1582c48c7b0a453d32375a4df17e153011b797ef28csewardj 1592c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Vector reg save area (quadword aligned) : 192 bytes */ 160291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,304 161291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 31,6,1 162291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,288 163291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 30,6,1 164291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,272 165291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 29,6,1 166291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,256 167291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 28,6,1 168291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,240 169291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 27,6,1 170291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,224 171291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 26,6,1 172291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,208 173291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 25,6,1 174291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,192 175291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 24,6,1 176291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,176 177291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 23,6,1 178291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,160 179291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 22,6,1 180291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,144 181291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 21,6,1 182291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,128 183291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 20,6,1 1842108204443f84bfa733397be519bdcf6810c5127cerion.LafterVMX1: 1852c48c7b0a453d32375a4df17e153011b797ef28csewardj 1862c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Local variable space... */ 1872c48c7b0a453d32375a4df17e153011b797ef28csewardj 188291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r3 holds two_words */ 189291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r4 holds guest_state */ 190291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r5 holds host_addr */ 1912c48c7b0a453d32375a4df17e153011b797ef28csewardj 1922c48c7b0a453d32375a4df17e153011b797ef28csewardj /* 96(sp) used later to check FPSCR[RM] */ 1931ade697d13061d1abf5d74dd243e478aedabcaa6cerion /* 88(sp) used later to load fpscr with zero */ 1941ade697d13061d1abf5d74dd243e478aedabcaa6cerion /* 48:87(sp) free */ 1952c48c7b0a453d32375a4df17e153011b797ef28csewardj 196cae0cc22b83ffb260ee8379e92099c5a701944cbcarll /* Linkage Area (reserved) BE ABI 1972c48c7b0a453d32375a4df17e153011b797ef28csewardj 40(sp) : TOC 1982c48c7b0a453d32375a4df17e153011b797ef28csewardj 32(sp) : link editor doubleword 1992c48c7b0a453d32375a4df17e153011b797ef28csewardj 24(sp) : compiler doubleword 2002c48c7b0a453d32375a4df17e153011b797ef28csewardj 16(sp) : LR 2012c48c7b0a453d32375a4df17e153011b797ef28csewardj 8(sp) : CR 2022c48c7b0a453d32375a4df17e153011b797ef28csewardj 0(sp) : back-chain 2032c48c7b0a453d32375a4df17e153011b797ef28csewardj */ 2042c48c7b0a453d32375a4df17e153011b797ef28csewardj 2052c48c7b0a453d32375a4df17e153011b797ef28csewardj /* set host FPU control word to the default mode expected 2062c48c7b0a453d32375a4df17e153011b797ef28csewardj by VEX-generated code. See comments in libvex.h for 2072c48c7b0a453d32375a4df17e153011b797ef28csewardj more info. */ 2082108204443f84bfa733397be519bdcf6810c5127cerion /* => get zero into f3 (tedious) 2092108204443f84bfa733397be519bdcf6810c5127cerion fsub 3,3,3 is not a reliable way to do this, since if 2102108204443f84bfa733397be519bdcf6810c5127cerion f3 holds a NaN or similar then we don't necessarily 2112108204443f84bfa733397be519bdcf6810c5127cerion wind up with zero. */ 212291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,0 213291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stw 6,88(1) 2141ade697d13061d1abf5d74dd243e478aedabcaa6cerion lfs 3,88(1) 2152108204443f84bfa733397be519bdcf6810c5127cerion mtfsf 0xFF,3 /* fpscr = lo32 of f3 */ 2162c48c7b0a453d32375a4df17e153011b797ef28csewardj 2172c48c7b0a453d32375a4df17e153011b797ef28csewardj /* set host AltiVec control word to the default mode expected 2182c48c7b0a453d32375a4df17e153011b797ef28csewardj by VEX-generated code. */ 219291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,.tocent__vgPlain_machine_ppc64_has_VMX@toc(2) 220291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,0(6) 221291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpldi 6,0 2222108204443f84bfa733397be519bdcf6810c5127cerion beq .LafterVMX2 2232c48c7b0a453d32375a4df17e153011b797ef28csewardj 2242c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltisw 3,0x0 /* generate zero */ 2252c48c7b0a453d32375a4df17e153011b797ef28csewardj mtvscr 3 2262108204443f84bfa733397be519bdcf6810c5127cerion.LafterVMX2: 2272c48c7b0a453d32375a4df17e153011b797ef28csewardj 2282c48c7b0a453d32375a4df17e153011b797ef28csewardj /* make a stack frame for the code we are calling */ 2292108204443f84bfa733397be519bdcf6810c5127cerion stdu 1,-48(1) 2302c48c7b0a453d32375a4df17e153011b797ef28csewardj 231291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Set up the guest state ptr */ 232291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mr 31,4 /* r31 (generated code gsp) = r4 */ 2332c48c7b0a453d32375a4df17e153011b797ef28csewardj 234291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* and jump into the code cache. Chained translations in 235291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj the code cache run, until for whatever reason, they can't 236291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj continue. When that happens, the translation in question 237291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj will jump (or call) to one of the continuation points 238291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj VG_(cp_...) below. */ 239291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mtctr 5 240291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj bctr 2411ade697d13061d1abf5d74dd243e478aedabcaa6cerion /*NOTREACHED*/ 2421ade697d13061d1abf5d74dd243e478aedabcaa6cerion 2431ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 244291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- Postamble and exit. ---*/ 2451ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 2461ade697d13061d1abf5d74dd243e478aedabcaa6cerion 247291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.postamble: 248291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* At this point, r6 and r7 contain two 249291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj words to be returned to the caller. r6 250291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj holds a TRC value, and r7 optionally may 251291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj hold another word (for CHAIN_ME exits, the 252291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj address of the place to patch.) */ 2532c48c7b0a453d32375a4df17e153011b797ef28csewardj 254291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* undo the "make a stack frame for the code we are calling" */ 255291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj addi 1,1,48 2562c48c7b0a453d32375a4df17e153011b797ef28csewardj 2572c48c7b0a453d32375a4df17e153011b797ef28csewardj /* We're leaving. Check that nobody messed with 258291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj VSCR or FPSCR in ways we don't expect. */ 259291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Using r11 - value used again further on, so don't trash! */ 260291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 11,.tocent__vgPlain_machine_ppc64_has_VMX@toc(2) 261291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 11,0(11) 2622c48c7b0a453d32375a4df17e153011b797ef28csewardj 263fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj /* Set fpscr back to a known state, since vex-generated code 264fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj may have messed with fpscr[rm]. */ 265fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj li 5,0 266fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj addi 1,1,-16 267fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj stw 5,0(1) 268fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj lfs 3,0(1) 269fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj addi 1,1,16 270fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj mtfsf 0xFF,3 /* fpscr = f3 */ 271fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj 272291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpldi 11,0 /* Do we have altivec? */ 2732108204443f84bfa733397be519bdcf6810c5127cerion beq .LafterVMX8 2742c48c7b0a453d32375a4df17e153011b797ef28csewardj 2752c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Check VSCR[NJ] == 1 */ 2762c48c7b0a453d32375a4df17e153011b797ef28csewardj /* first generate 4x 0x00010000 */ 2772c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltisw 4,0x1 /* 4x 0x00000001 */ 2782c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltisw 5,0x0 /* zero */ 2792c48c7b0a453d32375a4df17e153011b797ef28csewardj vsldoi 6,4,5,0x2 /* <<2*8 => 4x 0x00010000 */ 2802c48c7b0a453d32375a4df17e153011b797ef28csewardj /* retrieve VSCR and mask wanted bits */ 2812c48c7b0a453d32375a4df17e153011b797ef28csewardj mfvscr 7 2822c48c7b0a453d32375a4df17e153011b797ef28csewardj vand 7,7,6 /* gives NJ flag */ 2832c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltw 7,7,0x3 /* flags-word to all lanes */ 2842c48c7b0a453d32375a4df17e153011b797ef28csewardj vcmpequw. 8,6,7 /* CR[24] = 1 if v6 == v7 */ 2852108204443f84bfa733397be519bdcf6810c5127cerion bt 24,.invariant_violation /* branch if all_equal */ 2862c48c7b0a453d32375a4df17e153011b797ef28csewardj 287291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.LafterVMX8: 2882c48c7b0a453d32375a4df17e153011b797ef28csewardj /* otherwise we're OK */ 289291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .remove_frame 2902c48c7b0a453d32375a4df17e153011b797ef28csewardj 2912108204443f84bfa733397be519bdcf6810c5127cerion.invariant_violation: 292291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,VG_TRC_INVARIANT_FAILED 293291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 294291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* fall through */ 2952c48c7b0a453d32375a4df17e153011b797ef28csewardj 296291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.remove_frame: 297291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r11 already holds VG_(machine_ppc32_has_VMX) value */ 298291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmplwi 11,0 299291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj beq .LafterVMX9 3001ade697d13061d1abf5d74dd243e478aedabcaa6cerion 301291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Restore Altivec regs. 302291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj Use r5 as scratch since r6/r7 are live. */ 303291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* VRSAVE */ 304291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lwz 5,324(1) 305291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mfspr 5,256 /* VRSAVE reg is spr number 256 */ 3062c48c7b0a453d32375a4df17e153011b797ef28csewardj 307291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Vector regs */ 308291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,304 309291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 31,5,1 310291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,288 311291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 30,5,1 312291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,272 313291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 29,5,1 314291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,256 315291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 28,5,1 316291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,240 317291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 27,5,1 318291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,224 319291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 26,5,1 320291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,208 321291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 25,5,1 322291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,192 323291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 24,5,1 324291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,176 325291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 23,5,1 326291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,160 327291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 22,5,1 328291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,144 329291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 21,5,1 330291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,128 331291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 20,5,1 332291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.LafterVMX9: 3332c48c7b0a453d32375a4df17e153011b797ef28csewardj 334291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Restore FP regs */ 3352c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Floating-point regs */ 3362108204443f84bfa733397be519bdcf6810c5127cerion lfd 31,616(1) 3372108204443f84bfa733397be519bdcf6810c5127cerion lfd 30,608(1) 3382108204443f84bfa733397be519bdcf6810c5127cerion lfd 29,600(1) 3392108204443f84bfa733397be519bdcf6810c5127cerion lfd 28,592(1) 3402108204443f84bfa733397be519bdcf6810c5127cerion lfd 27,584(1) 3412108204443f84bfa733397be519bdcf6810c5127cerion lfd 26,576(1) 3422108204443f84bfa733397be519bdcf6810c5127cerion lfd 25,568(1) 3432108204443f84bfa733397be519bdcf6810c5127cerion lfd 24,560(1) 3442108204443f84bfa733397be519bdcf6810c5127cerion lfd 23,552(1) 3452108204443f84bfa733397be519bdcf6810c5127cerion lfd 22,544(1) 3462108204443f84bfa733397be519bdcf6810c5127cerion lfd 21,536(1) 3472108204443f84bfa733397be519bdcf6810c5127cerion lfd 20,528(1) 3482108204443f84bfa733397be519bdcf6810c5127cerion lfd 19,520(1) 3492108204443f84bfa733397be519bdcf6810c5127cerion lfd 18,512(1) 3502108204443f84bfa733397be519bdcf6810c5127cerion lfd 17,504(1) 3512108204443f84bfa733397be519bdcf6810c5127cerion lfd 16,496(1) 3522108204443f84bfa733397be519bdcf6810c5127cerion lfd 15,488(1) 3532108204443f84bfa733397be519bdcf6810c5127cerion lfd 14,480(1) 3542c48c7b0a453d32375a4df17e153011b797ef28csewardj 355291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* restore int regs, including importantly r3 (two_words) */ 3562108204443f84bfa733397be519bdcf6810c5127cerion ld 31,472(1) 3572108204443f84bfa733397be519bdcf6810c5127cerion ld 30,464(1) 3582108204443f84bfa733397be519bdcf6810c5127cerion ld 29,456(1) 3592108204443f84bfa733397be519bdcf6810c5127cerion ld 28,448(1) 3602108204443f84bfa733397be519bdcf6810c5127cerion ld 27,440(1) 3612108204443f84bfa733397be519bdcf6810c5127cerion ld 26,432(1) 3622108204443f84bfa733397be519bdcf6810c5127cerion ld 25,424(1) 3632108204443f84bfa733397be519bdcf6810c5127cerion ld 24,416(1) 3642108204443f84bfa733397be519bdcf6810c5127cerion ld 23,408(1) 3652108204443f84bfa733397be519bdcf6810c5127cerion ld 22,400(1) 3662108204443f84bfa733397be519bdcf6810c5127cerion ld 21,392(1) 3672108204443f84bfa733397be519bdcf6810c5127cerion ld 20,384(1) 3682108204443f84bfa733397be519bdcf6810c5127cerion ld 19,376(1) 3692108204443f84bfa733397be519bdcf6810c5127cerion ld 18,368(1) 3702108204443f84bfa733397be519bdcf6810c5127cerion ld 17,360(1) 3712108204443f84bfa733397be519bdcf6810c5127cerion ld 16,352(1) 3722108204443f84bfa733397be519bdcf6810c5127cerion ld 15,344(1) 3732108204443f84bfa733397be519bdcf6810c5127cerion ld 14,336(1) 3742108204443f84bfa733397be519bdcf6810c5127cerion ld 13,328(1) 375291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 3,104(1) 376291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Stash return values */ 377291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 6,0(3) 378291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 7,8(3) 3792c48c7b0a453d32375a4df17e153011b797ef28csewardj 380291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* restore lr & sp, and leave */ 3812108204443f84bfa733397be519bdcf6810c5127cerion ld 0,632(1) /* stack_size + 8 */ 3822108204443f84bfa733397be519bdcf6810c5127cerion mtcr 0 3832108204443f84bfa733397be519bdcf6810c5127cerion ld 0,640(1) /* stack_size + 16 */ 3842c48c7b0a453d32375a4df17e153011b797ef28csewardj mtlr 0 3852c48c7b0a453d32375a4df17e153011b797ef28csewardj addi 1,1,624 /* stack_size */ 3862c48c7b0a453d32375a4df17e153011b797ef28csewardj blr 3872c48c7b0a453d32375a4df17e153011b797ef28csewardj 3882c48c7b0a453d32375a4df17e153011b797ef28csewardj 389291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*----------------------------------------------------*/ 390291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- Continuation points ---*/ 391291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*----------------------------------------------------*/ 3921a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 393291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Chain me to slow entry point ------ */ 394291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 395291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 396291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_chain_me_to_slowEP) 397291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 398291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 399291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_chain_me_to_slowEP): 400291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_chain_me_to_slowEP),.TOC.@tocbase,0 401291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 402291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_chain_me_to_slowEP),@function 403291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_chain_me_to_slowEP) 404291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_chain_me_to_slowEP): 405291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* We got called. The return address indicates 406291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj where the patching needs to happen. Collect 407291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj the return address and, exit back to C land, 408291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj handing the caller the pair (Chain_me_S, RA) */ 409291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6, VG_TRC_CHAIN_ME_TO_SLOW_EP 410291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mflr 7 411291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* 20 = imm64-fixed5 r30, disp_cp_chain_me_to_slowEP 412291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = mtctr r30 413291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = btctr 414291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj */ 415291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj subi 7,7,20+4+4 416291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 417291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 418291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Chain me to fast entry point ------ */ 419291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 420291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 421291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_chain_me_to_fastEP) 422291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 423291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 424291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_chain_me_to_fastEP): 425291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_chain_me_to_fastEP),.TOC.@tocbase,0 426291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 427291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_chain_me_to_fastEP),@function 428291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_chain_me_to_fastEP) 429291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_chain_me_to_fastEP): 430291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* We got called. The return address indicates 431291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj where the patching needs to happen. Collect 432291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj the return address and, exit back to C land, 433291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj handing the caller the pair (Chain_me_S, RA) */ 434291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6, VG_TRC_CHAIN_ME_TO_FAST_EP 435291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mflr 7 436291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* 20 = imm64-fixed5 r30, disp_cp_chain_me_to_fastEP 437291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = mtctr r30 438291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = btctr 439291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj */ 440291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj subi 7,7,20+4+4 441291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 442291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 443291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Indirect but boring jump ------ */ 444291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 445291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 446291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_xindir) 447291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 448291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 449291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_xindir): 450291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_xindir),.TOC.@tocbase,0 451291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 452291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_xindir),@function 453291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_xindir) 454291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_xindir): 455291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Where are we going? */ 456291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 3,OFFSET_ppc64_CIA(31) 4571a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 458291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* stats only */ 45996b3c209fdcededc7aece86a23c7d9af78a036e0sewardj ld 5, .tocent__vgPlain_stats__n_xindirs_32@toc(2) 46096b3c209fdcededc7aece86a23c7d9af78a036e0sewardj lwz 6,0(5) 461291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj addi 6,6,1 46296b3c209fdcededc7aece86a23c7d9af78a036e0sewardj stw 6,0(5) 463291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 464291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r5 = &VG_(tt_fast) */ 465291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 5, .tocent__vgPlain_tt_fast@toc(2) /* &VG_(tt_fast) */ 466291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 467291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* try a fast lookup in the translation cache */ 468291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r4 = VG_TT_FAST_HASH(addr) * sizeof(FastCacheEntry) 469291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj = ((r3 >>u 2) & VG_TT_FAST_MASK) << 4 */ 470291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj rldicl 4,3, 62, 64-VG_TT_FAST_BITS /* entry# */ 471291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj sldi 4,4,4 /* entry# * sizeof(FastCacheEntry) */ 472291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj add 5,5,4 /* & VG_(tt_fast)[entry#] */ 473291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,0(5) /* .guest */ 474291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 7,8(5) /* .host */ 475291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpd 3,6 476291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj bne .fast_lookup_failed 477291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 478291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Found a match. Jump to .host. */ 479291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mtctr 7 480291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj bctr 4811a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 482291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.fast_lookup_failed: 483291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* stats only */ 48496b3c209fdcededc7aece86a23c7d9af78a036e0sewardj ld 5, .tocent__vgPlain_stats__n_xindir_misses_32@toc(2) 48596b3c209fdcededc7aece86a23c7d9af78a036e0sewardj lwz 6,0(5) 486291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj addi 6,6,1 48796b3c209fdcededc7aece86a23c7d9af78a036e0sewardj stw 6,0(5) 488291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 489291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,VG_TRC_INNER_FASTMISS 490291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 491291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 492291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /*NOTREACHED*/ 493291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 494291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Assisted jump ------ */ 495291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.section ".text" 496291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 497291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_xassisted) 498291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 499291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 500291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_xassisted): 501291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_xassisted),.TOC.@tocbase,0 502291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 503291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_xassisted),@function 504291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_xassisted) 505291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_xassisted): 506291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r31 contains the TRC */ 507291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mr 6,31 508291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 509291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 510291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 511291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Event check failed ------ */ 512291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 513291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 514291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_evcheck_fail) 515291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 516291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 517291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_evcheck_fail): 518291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_evcheck_fail),.TOC.@tocbase,0 519291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 520291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_evcheck_fail),@function 521291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_evcheck_fail) 522291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_evcheck_fail): 523291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,VG_TRC_INNER_COUNTERZERO 524291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 525291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 526291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 527291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 528291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.size .VG_(disp_run_translations), .-.VG_(disp_run_translations) 5291a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 5302c48c7b0a453d32375a4df17e153011b797ef28csewardj/* Let the linker know we don't need an executable stack */ 5312c48c7b0a453d32375a4df17e153011b797ef28csewardj.section .note.GNU-stack,"",@progbits 5322c48c7b0a453d32375a4df17e153011b797ef28csewardj 533582d58245637ab05272d89fb94b12fd0f18fa0f8carll#endif // defined(VGP_ppc64be_linux) 5348b68b64759254d514d98328c496cbd88cde4c9a5njn 5351ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--------------------------------------------------------------------*/ 5361ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--- end ---*/ 5371ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--------------------------------------------------------------------*/ 538