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 11b3a1e4bffbdbbf38304f216af405009868f43628sewardj Copyright (C) 2005-2015 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 313f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian#include "pub_core_basics_asm.h" 323f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian 33582d58245637ab05272d89fb94b12fd0f18fa0f8carll#if defined(VGP_ppc64be_linux) 348b68b64759254d514d98328c496cbd88cde4c9a5njn 352c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "pub_core_dispatch_asm.h" 362c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "pub_core_transtab_asm.h" 372c48c7b0a453d32375a4df17e153011b797ef28csewardj#include "libvex_guest_offsets.h" /* for OFFSET_ppc64_CIA */ 382c48c7b0a453d32375a4df17e153011b797ef28csewardj 392c48c7b0a453d32375a4df17e153011b797ef28csewardj 402c48c7b0a453d32375a4df17e153011b797ef28csewardj/* References to globals via the TOC */ 412c48c7b0a453d32375a4df17e153011b797ef28csewardj 422108204443f84bfa733397be519bdcf6810c5127cerion/* 43291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl vgPlain_tt_fast 442108204443f84bfa733397be519bdcf6810c5127cerion .lcomm vgPlain_tt_fast,4,4 452108204443f84bfa733397be519bdcf6810c5127cerion .type vgPlain_tt_fast, @object 462108204443f84bfa733397be519bdcf6810c5127cerion*/ 47291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.section ".toc","aw" 482108204443f84bfa733397be519bdcf6810c5127cerion.tocent__vgPlain_tt_fast: 492108204443f84bfa733397be519bdcf6810c5127cerion .tc vgPlain_tt_fast[TC],vgPlain_tt_fast 5096b3c209fdcededc7aece86a23c7d9af78a036e0sewardj.tocent__vgPlain_stats__n_xindirs_32: 5196b3c209fdcededc7aece86a23c7d9af78a036e0sewardj .tc vgPlain_stats__n_xindirs_32[TC],vgPlain_stats__n_xindirs_32 5296b3c209fdcededc7aece86a23c7d9af78a036e0sewardj.tocent__vgPlain_stats__n_xindir_misses_32: 5396b3c209fdcededc7aece86a23c7d9af78a036e0sewardj .tc vgPlain_stats__n_xindir_misses_32[TC],vgPlain_stats__n_xindir_misses_32 542108204443f84bfa733397be519bdcf6810c5127cerion.tocent__vgPlain_machine_ppc64_has_VMX: 552108204443f84bfa733397be519bdcf6810c5127cerion .tc vgPlain_machine_ppc64_has_VMX[TC],vgPlain_machine_ppc64_has_VMX 562c48c7b0a453d32375a4df17e153011b797ef28csewardj 572c48c7b0a453d32375a4df17e153011b797ef28csewardj/*------------------------------------------------------------*/ 581a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj/*--- ---*/ 59291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- The dispatch loop. VG_(disp_run_translations) is ---*/ 60291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- used to run all translations, ---*/ 61291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- including no-redir ones. ---*/ 621a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj/*--- ---*/ 632c48c7b0a453d32375a4df17e153011b797ef28csewardj/*------------------------------------------------------------*/ 642c48c7b0a453d32375a4df17e153011b797ef28csewardj 651ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 66291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- Entry and preamble (set everything up) ---*/ 671ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 682c48c7b0a453d32375a4df17e153011b797ef28csewardj 691ade697d13061d1abf5d74dd243e478aedabcaa6cerion/* signature: 70291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjvoid VG_(disp_run_translations)( UWord* two_words, 71291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj void* guest_state, 72291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj Addr host_addr ); 731ade697d13061d1abf5d74dd243e478aedabcaa6cerion*/ 742108204443f84bfa733397be519bdcf6810c5127cerion 751ade697d13061d1abf5d74dd243e478aedabcaa6cerion.section ".text" 761ade697d13061d1abf5d74dd243e478aedabcaa6cerion.align 2 77291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.globl VG_(disp_run_translations) 781ade697d13061d1abf5d74dd243e478aedabcaa6cerion.section ".opd","aw" 791ade697d13061d1abf5d74dd243e478aedabcaa6cerion.align 3 80291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_run_translations): 81291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.quad .VG_(disp_run_translations),.TOC.@tocbase,0 821ade697d13061d1abf5d74dd243e478aedabcaa6cerion.previous 83291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.type .VG_(disp_run_translations),@function 84291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.globl .VG_(disp_run_translations) 85291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_run_translations): 86291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r3 holds two_words */ 87291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r4 holds guest_state */ 88291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r5 holds host_addr */ 89291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 90291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* ----- entry point to VG_(disp_run_translations) ----- */ 912108204443f84bfa733397be519bdcf6810c5127cerion /* PPC64 ABI saves LR->16(prt_sp), CR->8(prt_sp)) */ 921ade697d13061d1abf5d74dd243e478aedabcaa6cerion 932108204443f84bfa733397be519bdcf6810c5127cerion /* Save lr, cr */ 94291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mflr 6 95291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 6,16(1) 96291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mfcr 6 97291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 6,8(1) 982c48c7b0a453d32375a4df17e153011b797ef28csewardj 992c48c7b0a453d32375a4df17e153011b797ef28csewardj /* New stack frame */ 1002108204443f84bfa733397be519bdcf6810c5127cerion stdu 1,-624(1) /* sp should maintain 16-byte alignment */ 1012c48c7b0a453d32375a4df17e153011b797ef28csewardj 102291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* General reg save area : 152 bytes */ 103291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 31,472(1) 104291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 30,464(1) 105291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 29,456(1) 106291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 28,448(1) 107291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 27,440(1) 108291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 26,432(1) 109291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 25,424(1) 110291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 24,416(1) 111291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 23,408(1) 112291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 22,400(1) 113291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 21,392(1) 114291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 20,384(1) 115291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 19,376(1) 116291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 18,368(1) 117291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 17,360(1) 118291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 16,352(1) 119291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 15,344(1) 120291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 14,336(1) 121291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 13,328(1) 122291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 3,104(1) /* save two_words for later */ 1232c48c7b0a453d32375a4df17e153011b797ef28csewardj 124291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Save callee-saved registers... */ 1252c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Floating-point reg save area : 144 bytes */ 1262c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 31,616(1) 1272c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 30,608(1) 1282c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 29,600(1) 1292c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 28,592(1) 1302c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 27,584(1) 1312c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 26,576(1) 1322c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 25,568(1) 1332c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 24,560(1) 1342c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 23,552(1) 1352c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 22,544(1) 1362c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 21,536(1) 1372c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 20,528(1) 1382c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 19,520(1) 1392c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 18,512(1) 1402c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 17,504(1) 1412c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 16,496(1) 1422c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 15,488(1) 1432c48c7b0a453d32375a4df17e153011b797ef28csewardj stfd 14,480(1) 1442c48c7b0a453d32375a4df17e153011b797ef28csewardj 1452c48c7b0a453d32375a4df17e153011b797ef28csewardj /* It's necessary to save/restore VRSAVE in the AIX / Darwin ABI. 1462c48c7b0a453d32375a4df17e153011b797ef28csewardj The Linux kernel might not actually use VRSAVE for its intended 1472c48c7b0a453d32375a4df17e153011b797ef28csewardj purpose, but it should be harmless to preserve anyway. */ 148291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r3, r4, r5 are live here, so use r6 */ 149291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,.tocent__vgPlain_machine_ppc64_has_VMX@toc(2) 150291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,0(6) 151291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpldi 6,0 1522108204443f84bfa733397be519bdcf6810c5127cerion beq .LafterVMX1 1532c48c7b0a453d32375a4df17e153011b797ef28csewardj 1542c48c7b0a453d32375a4df17e153011b797ef28csewardj /* VRSAVE save word : 32 bytes */ 155291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mfspr 6,256 /* vrsave reg is spr number 256 */ 156291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stw 6,324(1) 1572c48c7b0a453d32375a4df17e153011b797ef28csewardj 1582c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Alignment padding : 4 bytes */ 1592c48c7b0a453d32375a4df17e153011b797ef28csewardj 1602c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Vector reg save area (quadword aligned) : 192 bytes */ 161291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,304 162291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 31,6,1 163291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,288 164291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 30,6,1 165291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,272 166291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 29,6,1 167291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,256 168291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 28,6,1 169291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,240 170291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 27,6,1 171291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,224 172291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 26,6,1 173291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,208 174291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 25,6,1 175291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,192 176291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 24,6,1 177291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,176 178291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 23,6,1 179291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,160 180291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 22,6,1 181291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,144 182291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 21,6,1 183291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,128 184291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stvx 20,6,1 1852108204443f84bfa733397be519bdcf6810c5127cerion.LafterVMX1: 1862c48c7b0a453d32375a4df17e153011b797ef28csewardj 1872c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Local variable space... */ 1882c48c7b0a453d32375a4df17e153011b797ef28csewardj 189291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r3 holds two_words */ 190291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r4 holds guest_state */ 191291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r5 holds host_addr */ 1922c48c7b0a453d32375a4df17e153011b797ef28csewardj 1932c48c7b0a453d32375a4df17e153011b797ef28csewardj /* 96(sp) used later to check FPSCR[RM] */ 1941ade697d13061d1abf5d74dd243e478aedabcaa6cerion /* 88(sp) used later to load fpscr with zero */ 1951ade697d13061d1abf5d74dd243e478aedabcaa6cerion /* 48:87(sp) free */ 1962c48c7b0a453d32375a4df17e153011b797ef28csewardj 197cae0cc22b83ffb260ee8379e92099c5a701944cbcarll /* Linkage Area (reserved) BE ABI 1982c48c7b0a453d32375a4df17e153011b797ef28csewardj 40(sp) : TOC 1992c48c7b0a453d32375a4df17e153011b797ef28csewardj 32(sp) : link editor doubleword 2002c48c7b0a453d32375a4df17e153011b797ef28csewardj 24(sp) : compiler doubleword 2012c48c7b0a453d32375a4df17e153011b797ef28csewardj 16(sp) : LR 2022c48c7b0a453d32375a4df17e153011b797ef28csewardj 8(sp) : CR 2032c48c7b0a453d32375a4df17e153011b797ef28csewardj 0(sp) : back-chain 2042c48c7b0a453d32375a4df17e153011b797ef28csewardj */ 2052c48c7b0a453d32375a4df17e153011b797ef28csewardj 2062c48c7b0a453d32375a4df17e153011b797ef28csewardj /* set host FPU control word to the default mode expected 2072c48c7b0a453d32375a4df17e153011b797ef28csewardj by VEX-generated code. See comments in libvex.h for 2082c48c7b0a453d32375a4df17e153011b797ef28csewardj more info. */ 2092108204443f84bfa733397be519bdcf6810c5127cerion /* => get zero into f3 (tedious) 2102108204443f84bfa733397be519bdcf6810c5127cerion fsub 3,3,3 is not a reliable way to do this, since if 2112108204443f84bfa733397be519bdcf6810c5127cerion f3 holds a NaN or similar then we don't necessarily 2122108204443f84bfa733397be519bdcf6810c5127cerion wind up with zero. */ 213291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,0 214291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj stw 6,88(1) 2151ade697d13061d1abf5d74dd243e478aedabcaa6cerion lfs 3,88(1) 2162108204443f84bfa733397be519bdcf6810c5127cerion mtfsf 0xFF,3 /* fpscr = lo32 of f3 */ 2172c48c7b0a453d32375a4df17e153011b797ef28csewardj 2182c48c7b0a453d32375a4df17e153011b797ef28csewardj /* set host AltiVec control word to the default mode expected 2192c48c7b0a453d32375a4df17e153011b797ef28csewardj by VEX-generated code. */ 220291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,.tocent__vgPlain_machine_ppc64_has_VMX@toc(2) 221291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,0(6) 222291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpldi 6,0 2232108204443f84bfa733397be519bdcf6810c5127cerion beq .LafterVMX2 2242c48c7b0a453d32375a4df17e153011b797ef28csewardj 2252c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltisw 3,0x0 /* generate zero */ 2262c48c7b0a453d32375a4df17e153011b797ef28csewardj mtvscr 3 2272108204443f84bfa733397be519bdcf6810c5127cerion.LafterVMX2: 2282c48c7b0a453d32375a4df17e153011b797ef28csewardj 2292c48c7b0a453d32375a4df17e153011b797ef28csewardj /* make a stack frame for the code we are calling */ 2302108204443f84bfa733397be519bdcf6810c5127cerion stdu 1,-48(1) 2312c48c7b0a453d32375a4df17e153011b797ef28csewardj 232291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Set up the guest state ptr */ 233291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mr 31,4 /* r31 (generated code gsp) = r4 */ 2342c48c7b0a453d32375a4df17e153011b797ef28csewardj 235291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* and jump into the code cache. Chained translations in 236291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj the code cache run, until for whatever reason, they can't 237291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj continue. When that happens, the translation in question 238291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj will jump (or call) to one of the continuation points 239291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj VG_(cp_...) below. */ 240291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mtctr 5 241291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj bctr 2421ade697d13061d1abf5d74dd243e478aedabcaa6cerion /*NOTREACHED*/ 2431ade697d13061d1abf5d74dd243e478aedabcaa6cerion 2441ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 245291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- Postamble and exit. ---*/ 2461ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*----------------------------------------------------*/ 2471ade697d13061d1abf5d74dd243e478aedabcaa6cerion 248291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.postamble: 249291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* At this point, r6 and r7 contain two 250291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj words to be returned to the caller. r6 251291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj holds a TRC value, and r7 optionally may 252291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj hold another word (for CHAIN_ME exits, the 253291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj address of the place to patch.) */ 2542c48c7b0a453d32375a4df17e153011b797ef28csewardj 255291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* undo the "make a stack frame for the code we are calling" */ 256291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj addi 1,1,48 2572c48c7b0a453d32375a4df17e153011b797ef28csewardj 2582c48c7b0a453d32375a4df17e153011b797ef28csewardj /* We're leaving. Check that nobody messed with 259291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj VSCR or FPSCR in ways we don't expect. */ 260291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Using r11 - value used again further on, so don't trash! */ 261291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 11,.tocent__vgPlain_machine_ppc64_has_VMX@toc(2) 262291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 11,0(11) 2632c48c7b0a453d32375a4df17e153011b797ef28csewardj 264fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj /* Set fpscr back to a known state, since vex-generated code 265fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj may have messed with fpscr[rm]. */ 266fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj li 5,0 267fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj addi 1,1,-16 268fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj stw 5,0(1) 269fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj lfs 3,0(1) 270fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj addi 1,1,16 271fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj mtfsf 0xFF,3 /* fpscr = f3 */ 272fdac02c3ff8f4398295ed7b966c85fec5a11e4b0sewardj 273291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpldi 11,0 /* Do we have altivec? */ 2742108204443f84bfa733397be519bdcf6810c5127cerion beq .LafterVMX8 2752c48c7b0a453d32375a4df17e153011b797ef28csewardj 2762c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Check VSCR[NJ] == 1 */ 2772c48c7b0a453d32375a4df17e153011b797ef28csewardj /* first generate 4x 0x00010000 */ 2782c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltisw 4,0x1 /* 4x 0x00000001 */ 2792c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltisw 5,0x0 /* zero */ 2802c48c7b0a453d32375a4df17e153011b797ef28csewardj vsldoi 6,4,5,0x2 /* <<2*8 => 4x 0x00010000 */ 2812c48c7b0a453d32375a4df17e153011b797ef28csewardj /* retrieve VSCR and mask wanted bits */ 2822c48c7b0a453d32375a4df17e153011b797ef28csewardj mfvscr 7 2832c48c7b0a453d32375a4df17e153011b797ef28csewardj vand 7,7,6 /* gives NJ flag */ 2842c48c7b0a453d32375a4df17e153011b797ef28csewardj vspltw 7,7,0x3 /* flags-word to all lanes */ 2852c48c7b0a453d32375a4df17e153011b797ef28csewardj vcmpequw. 8,6,7 /* CR[24] = 1 if v6 == v7 */ 2862108204443f84bfa733397be519bdcf6810c5127cerion bt 24,.invariant_violation /* branch if all_equal */ 2872c48c7b0a453d32375a4df17e153011b797ef28csewardj 288291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.LafterVMX8: 2892c48c7b0a453d32375a4df17e153011b797ef28csewardj /* otherwise we're OK */ 290291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .remove_frame 2912c48c7b0a453d32375a4df17e153011b797ef28csewardj 2922108204443f84bfa733397be519bdcf6810c5127cerion.invariant_violation: 293291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,VG_TRC_INVARIANT_FAILED 294291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 295291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* fall through */ 2962c48c7b0a453d32375a4df17e153011b797ef28csewardj 297291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.remove_frame: 298291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r11 already holds VG_(machine_ppc32_has_VMX) value */ 299291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmplwi 11,0 300291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj beq .LafterVMX9 3011ade697d13061d1abf5d74dd243e478aedabcaa6cerion 302291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Restore Altivec regs. 303291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj Use r5 as scratch since r6/r7 are live. */ 304291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* VRSAVE */ 305291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lwz 5,324(1) 306291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mfspr 5,256 /* VRSAVE reg is spr number 256 */ 3072c48c7b0a453d32375a4df17e153011b797ef28csewardj 308291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Vector regs */ 309291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,304 310291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 31,5,1 311291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,288 312291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 30,5,1 313291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,272 314291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 29,5,1 315291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,256 316291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 28,5,1 317291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,240 318291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 27,5,1 319291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,224 320291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 26,5,1 321291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,208 322291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 25,5,1 323291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,192 324291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 24,5,1 325291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,176 326291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 23,5,1 327291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,160 328291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 22,5,1 329291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,144 330291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 21,5,1 331291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 5,128 332291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj lvx 20,5,1 333291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.LafterVMX9: 3342c48c7b0a453d32375a4df17e153011b797ef28csewardj 335291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Restore FP regs */ 3362c48c7b0a453d32375a4df17e153011b797ef28csewardj /* Floating-point regs */ 3372108204443f84bfa733397be519bdcf6810c5127cerion lfd 31,616(1) 3382108204443f84bfa733397be519bdcf6810c5127cerion lfd 30,608(1) 3392108204443f84bfa733397be519bdcf6810c5127cerion lfd 29,600(1) 3402108204443f84bfa733397be519bdcf6810c5127cerion lfd 28,592(1) 3412108204443f84bfa733397be519bdcf6810c5127cerion lfd 27,584(1) 3422108204443f84bfa733397be519bdcf6810c5127cerion lfd 26,576(1) 3432108204443f84bfa733397be519bdcf6810c5127cerion lfd 25,568(1) 3442108204443f84bfa733397be519bdcf6810c5127cerion lfd 24,560(1) 3452108204443f84bfa733397be519bdcf6810c5127cerion lfd 23,552(1) 3462108204443f84bfa733397be519bdcf6810c5127cerion lfd 22,544(1) 3472108204443f84bfa733397be519bdcf6810c5127cerion lfd 21,536(1) 3482108204443f84bfa733397be519bdcf6810c5127cerion lfd 20,528(1) 3492108204443f84bfa733397be519bdcf6810c5127cerion lfd 19,520(1) 3502108204443f84bfa733397be519bdcf6810c5127cerion lfd 18,512(1) 3512108204443f84bfa733397be519bdcf6810c5127cerion lfd 17,504(1) 3522108204443f84bfa733397be519bdcf6810c5127cerion lfd 16,496(1) 3532108204443f84bfa733397be519bdcf6810c5127cerion lfd 15,488(1) 3542108204443f84bfa733397be519bdcf6810c5127cerion lfd 14,480(1) 3552c48c7b0a453d32375a4df17e153011b797ef28csewardj 356291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* restore int regs, including importantly r3 (two_words) */ 3572108204443f84bfa733397be519bdcf6810c5127cerion ld 31,472(1) 3582108204443f84bfa733397be519bdcf6810c5127cerion ld 30,464(1) 3592108204443f84bfa733397be519bdcf6810c5127cerion ld 29,456(1) 3602108204443f84bfa733397be519bdcf6810c5127cerion ld 28,448(1) 3612108204443f84bfa733397be519bdcf6810c5127cerion ld 27,440(1) 3622108204443f84bfa733397be519bdcf6810c5127cerion ld 26,432(1) 3632108204443f84bfa733397be519bdcf6810c5127cerion ld 25,424(1) 3642108204443f84bfa733397be519bdcf6810c5127cerion ld 24,416(1) 3652108204443f84bfa733397be519bdcf6810c5127cerion ld 23,408(1) 3662108204443f84bfa733397be519bdcf6810c5127cerion ld 22,400(1) 3672108204443f84bfa733397be519bdcf6810c5127cerion ld 21,392(1) 3682108204443f84bfa733397be519bdcf6810c5127cerion ld 20,384(1) 3692108204443f84bfa733397be519bdcf6810c5127cerion ld 19,376(1) 3702108204443f84bfa733397be519bdcf6810c5127cerion ld 18,368(1) 3712108204443f84bfa733397be519bdcf6810c5127cerion ld 17,360(1) 3722108204443f84bfa733397be519bdcf6810c5127cerion ld 16,352(1) 3732108204443f84bfa733397be519bdcf6810c5127cerion ld 15,344(1) 3742108204443f84bfa733397be519bdcf6810c5127cerion ld 14,336(1) 3752108204443f84bfa733397be519bdcf6810c5127cerion ld 13,328(1) 376291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 3,104(1) 377291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Stash return values */ 378291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 6,0(3) 379291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj std 7,8(3) 3802c48c7b0a453d32375a4df17e153011b797ef28csewardj 381291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* restore lr & sp, and leave */ 3822108204443f84bfa733397be519bdcf6810c5127cerion ld 0,632(1) /* stack_size + 8 */ 3832108204443f84bfa733397be519bdcf6810c5127cerion mtcr 0 3842108204443f84bfa733397be519bdcf6810c5127cerion ld 0,640(1) /* stack_size + 16 */ 3852c48c7b0a453d32375a4df17e153011b797ef28csewardj mtlr 0 3862c48c7b0a453d32375a4df17e153011b797ef28csewardj addi 1,1,624 /* stack_size */ 3872c48c7b0a453d32375a4df17e153011b797ef28csewardj blr 3882c48c7b0a453d32375a4df17e153011b797ef28csewardj 3892c48c7b0a453d32375a4df17e153011b797ef28csewardj 390291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*----------------------------------------------------*/ 391291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*--- Continuation points ---*/ 392291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/*----------------------------------------------------*/ 3931a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 394291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Chain me to slow entry point ------ */ 395291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 396291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 397291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_chain_me_to_slowEP) 398291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 399291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 400291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_chain_me_to_slowEP): 401291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_chain_me_to_slowEP),.TOC.@tocbase,0 402291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 403291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_chain_me_to_slowEP),@function 404291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_chain_me_to_slowEP) 405291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_chain_me_to_slowEP): 406291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* We got called. The return address indicates 407291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj where the patching needs to happen. Collect 408291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj the return address and, exit back to C land, 409291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj handing the caller the pair (Chain_me_S, RA) */ 410291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6, VG_TRC_CHAIN_ME_TO_SLOW_EP 411291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mflr 7 412291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* 20 = imm64-fixed5 r30, disp_cp_chain_me_to_slowEP 413291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = mtctr r30 414291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = btctr 415291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj */ 416291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj subi 7,7,20+4+4 417291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 418291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 419291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Chain me to fast entry point ------ */ 420291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 421291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 422291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_chain_me_to_fastEP) 423291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 424291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 425291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_chain_me_to_fastEP): 426291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_chain_me_to_fastEP),.TOC.@tocbase,0 427291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 428291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_chain_me_to_fastEP),@function 429291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_chain_me_to_fastEP) 430291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_chain_me_to_fastEP): 431291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* We got called. The return address indicates 432291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj where the patching needs to happen. Collect 433291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj the return address and, exit back to C land, 434291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj handing the caller the pair (Chain_me_S, RA) */ 435291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6, VG_TRC_CHAIN_ME_TO_FAST_EP 436291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mflr 7 437291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* 20 = imm64-fixed5 r30, disp_cp_chain_me_to_fastEP 438291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = mtctr r30 439291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 4 = btctr 440291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj */ 441291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj subi 7,7,20+4+4 442291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 443291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 444291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Indirect but boring jump ------ */ 445291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 446291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 447291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_xindir) 448291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 449291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 450291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_xindir): 451291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_xindir),.TOC.@tocbase,0 452291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 453291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_xindir),@function 454291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_xindir) 455291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_xindir): 456291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Where are we going? */ 457291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 3,OFFSET_ppc64_CIA(31) 4581a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 459291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* stats only */ 46096b3c209fdcededc7aece86a23c7d9af78a036e0sewardj ld 5, .tocent__vgPlain_stats__n_xindirs_32@toc(2) 46196b3c209fdcededc7aece86a23c7d9af78a036e0sewardj lwz 6,0(5) 462291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj addi 6,6,1 46396b3c209fdcededc7aece86a23c7d9af78a036e0sewardj stw 6,0(5) 464291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 465291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r5 = &VG_(tt_fast) */ 466291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 5, .tocent__vgPlain_tt_fast@toc(2) /* &VG_(tt_fast) */ 467291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 468291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* try a fast lookup in the translation cache */ 469291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r4 = VG_TT_FAST_HASH(addr) * sizeof(FastCacheEntry) 470291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj = ((r3 >>u 2) & VG_TT_FAST_MASK) << 4 */ 471291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj rldicl 4,3, 62, 64-VG_TT_FAST_BITS /* entry# */ 472291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj sldi 4,4,4 /* entry# * sizeof(FastCacheEntry) */ 473291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj add 5,5,4 /* & VG_(tt_fast)[entry#] */ 474291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 6,0(5) /* .guest */ 475291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj ld 7,8(5) /* .host */ 476291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj cmpd 3,6 477291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj bne .fast_lookup_failed 478291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 479291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* Found a match. Jump to .host. */ 480291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mtctr 7 481291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj bctr 4821a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 483291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.fast_lookup_failed: 484291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* stats only */ 48596b3c209fdcededc7aece86a23c7d9af78a036e0sewardj ld 5, .tocent__vgPlain_stats__n_xindir_misses_32@toc(2) 48696b3c209fdcededc7aece86a23c7d9af78a036e0sewardj lwz 6,0(5) 487291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj addi 6,6,1 48896b3c209fdcededc7aece86a23c7d9af78a036e0sewardj stw 6,0(5) 489291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 490291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,VG_TRC_INNER_FASTMISS 491291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 492291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 493291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /*NOTREACHED*/ 494291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 495291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Assisted jump ------ */ 496291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.section ".text" 497291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 498291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_xassisted) 499291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 500291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 501291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_xassisted): 502291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_xassisted),.TOC.@tocbase,0 503291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 504291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_xassisted),@function 505291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_xassisted) 506291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_xassisted): 507291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj /* r31 contains the TRC */ 508291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj mr 6,31 509291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 510291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 511291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 512291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj/* ------ Event check failed ------ */ 513291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".text" 514291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 2 515291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl VG_(disp_cp_evcheck_fail) 516291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .section ".opd","aw" 517291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .align 3 518291849fb0285e0998b4c9e33eb153eb3373c4a88sewardjVG_(disp_cp_evcheck_fail): 519291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .quad .VG_(disp_cp_evcheck_fail),.TOC.@tocbase,0 520291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .previous 521291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .type .VG_(disp_cp_evcheck_fail),@function 522291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj .globl .VG_(disp_cp_evcheck_fail) 523291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.VG_(disp_cp_evcheck_fail): 524291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 6,VG_TRC_INNER_COUNTERZERO 525291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj li 7,0 526291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj b .postamble 527291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 528291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj 529291849fb0285e0998b4c9e33eb153eb3373c4a88sewardj.size .VG_(disp_run_translations), .-.VG_(disp_run_translations) 5301a85f4f4e5e1ec2518137ffa9a6a9bf7d9c50df9sewardj 531582d58245637ab05272d89fb94b12fd0f18fa0f8carll#endif // defined(VGP_ppc64be_linux) 5328b68b64759254d514d98328c496cbd88cde4c9a5njn 5333f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian/* Let the linker know we don't need an executable stack */ 5343f1d6138db68f2aa74c5d005c3333cbe94788c7bflorianMARK_STACK_NO_EXEC 5353f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian 5361ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--------------------------------------------------------------------*/ 5371ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--- end ---*/ 5381ade697d13061d1abf5d74dd243e478aedabcaa6cerion/*--------------------------------------------------------------------*/ 539