1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- The core dispatch loop, for jumping to a code address. ---*/ 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- dispatch-x86-darwin.S ---*/ 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown This file is part of Valgrind, a dynamic binary instrumentation 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown framework. 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 11663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Copyright (C) 2000-2012 Julian Seward 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jseward@acm.org 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown This program is free software; you can redistribute it and/or 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown modify it under the terms of the GNU General Public License as 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown published by the Free Software Foundation; either version 2 of the 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown License, or (at your option) any later version. 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown This program is distributed in the hope that it will be useful, but 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown WITHOUT ANY WARRANTY; without even the implied warranty of 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown General Public License for more details. 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown You should have received a copy of the GNU General Public License 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown along with this program; if not, write to the Free Software 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 02111-1307, USA. 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown The GNU General Public License is contained in the file COPYING. 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined(VGP_x86_darwin) 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_core_basics_asm.h" 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_core_dispatch_asm.h" 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "pub_core_transtab_asm.h" 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_guest_offsets.h" /* for OFFSET_x86_EIP */ 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*------------------------------------------------------------*/ 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- ---*/ 42663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- The dispatch loop. VG_(disp_run_translations) is ---*/ 43663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- used to run all translations, ---*/ 44663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- including no-redir ones. ---*/ 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- ---*/ 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*------------------------------------------------------------*/ 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 49663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- Entry and preamble (set everything up) ---*/ 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* signature: 53663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid VG_(disp_run_translations)( UWord* two_words, 54663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng void* guest_state, 55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng Addr host_addr ); 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/ 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.text 58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_run_translations) 59663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_run_translations): 60663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 0(%esp) holds our return address. */ 61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 4(%esp) holds two_words */ 62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 8(%esp) holds guest_state */ 63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 12(%esp) holds host_addr */ 64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* The preamble */ 66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 67663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Save integer registers, since this is a pseudo-function. */ 68663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng pushl %eax 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %ebx 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %ecx 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %edx 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %esi 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %edi 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl %ebp 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 76663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 28+4(%esp) holds two_words */ 77663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 28+8(%esp) holds guest_state */ 78663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 28+12(%esp) holds host_addr */ 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 80663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Get the host CPU in the state expected by generated code. */ 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* set host FPU control word to the default mode expected 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown by VEX-generated code. See comments in libvex.h for 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown more info. */ 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown finit 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0x027F 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fldcw (%esp) 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown addl $4, %esp 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* set host SSE control word to the default mode expected 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown by VEX-generated code. */ 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmpl $0, VG_(machine_x86_have_mxcsr) 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz L1 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0x1F80 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ldmxcsr (%esp) 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown addl $4, %esp 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownL1: 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* set dir flag to known value */ 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cld 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Set up the guest state pointer */ 102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 28+8(%esp), %ebp 103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* and jump into the code cache. Chained translations in 105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the code cache run, until for whatever reason, they can't 106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng continue. When that happens, the translation in question 107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng will jump (or call) to one of the continuation points 108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng VG_(cp_...) below. */ 109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmpl *28+12(%esp) 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /*NOTREACHED*/ 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- Postamble and exit. ---*/ 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------------*/ 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengpostamble: 117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* At this point, %eax and %edx contain two 118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng words to be returned to the caller. %eax 119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng holds a TRC value, and %edx optionally may 120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng hold another word (for CHAIN_ME exits, the 121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng address of the place to patch.) */ 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* We're leaving. Check that nobody messed with %mxcsr 124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng or %fpucw. We can't mess with %eax or %edx here as they 125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng holds the tentative return value, but any others are OK. */ 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if !defined(ENABLE_INNER) 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* This check fails for self-hosting, so skip in that case */ 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fstcw (%esp) 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmpl $0x027F, (%esp) 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %esi /* get rid of the word without trashing %eflags */ 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz invariant_violation 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 134663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng# cmpl $0, VG_(machine_x86_have_mxcsr) 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz L2 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown stmxcsr (%esp) 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown andl $0xFFFFFFC0, (%esp) /* mask out status flags */ 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmpl $0x1F80, (%esp) 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %esi 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz invariant_violation 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownL2: /* otherwise we're OK */ 143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp remove_frame 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browninvariant_violation: 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown movl $VG_TRC_INVARIANT_FAILED, %eax 146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengremove_frame: 149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Stash return values */ 150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 28+4(%esp), %edi /* two_words */ 151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %eax, 0(%edi) 152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %edx, 4(%edi) 153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Restore int regs and return. */ 154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %ebp 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %edi 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %esi 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %edx 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %ecx 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown popl %ebx 160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng popl %eax 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ret 162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*----------------------------------------------------*/ 164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*--- Continuation points ---*/ 165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/*----------------------------------------------------*/ 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Chain me to slow entry point ------ */ 168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_cp_chain_me_to_slowEP) 169663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_chain_me_to_slowEP): 170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* We got called. The return address indicates 171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng where the patching needs to happen. Collect 172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the return address and, exit back to C land, 173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng handing the caller the pair (Chain_me_S, RA) */ 174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_CHAIN_ME_TO_SLOW_EP, %eax 175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng popl %edx 176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 5 = movl $VG_(disp_chain_me_to_slowEP), %edx; 177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 2 = call *%edx */ 178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng subl $5+2, %edx 179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Chain me to fast entry point ------ */ 182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_cp_chain_me_to_fastEP) 183663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_chain_me_to_fastEP): 184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* We got called. The return address indicates 185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng where the patching needs to happen. Collect 186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng the return address and, exit back to C land, 187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng handing the caller the pair (Chain_me_F, RA) */ 188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_CHAIN_ME_TO_FAST_EP, %eax 189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng popl %edx 190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* 5 = movl $VG_(disp_chain_me_to_fastEP), %edx; 191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 2 = call *%edx */ 192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng subl $5+2, %edx 193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 194663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 195663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Indirect but boring jump ------ */ 196663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_cp_xindir) 197663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_xindir): 198663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Where are we going? */ 199663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl OFFSET_x86_EIP(%ebp), %eax 200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 201663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* stats only */ 202663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng addl $1, VG_(stats__n_xindirs_32) 203663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 204663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* try a fast lookup in the translation cache */ 205663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %eax, %ebx /* next guest addr */ 206663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng andl $VG_TT_FAST_MASK, %ebx /* entry# */ 207663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 0+VG_(tt_fast)(,%ebx,8), %esi /* .guest */ 208663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl 4+VG_(tt_fast)(,%ebx,8), %edi /* .host */ 209663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng cmpl %eax, %esi 210663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jnz fast_lookup_failed 211663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 212663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* Found a match. Jump to .host. */ 213663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp *%edi 214663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ud2 /* persuade insn decoders not to speculate past here */ 215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 216663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengfast_lookup_failed: 217663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* stats only */ 218663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng addl $1, VG_(stats__n_xindir_misses_32) 219663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 220663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_INNER_FASTMISS, %eax 221663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 222663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 223663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 224663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Assisted jump ------ */ 225663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_cp_xassisted) 226663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_xassisted): 227663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng /* %ebp contains the TRC */ 228663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl %ebp, %eax 229663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 230663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 231663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 232663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* ------ Event check failed ------ */ 233663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng.globl VG_(disp_cp_evcheck_fail) 234663860b1408516d02ebfcb3a9999a134e6cfb223Ben ChengVG_(disp_cp_evcheck_fail): 235663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $VG_TRC_INNER_COUNTERZERO, %eax 236663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng movl $0, %edx 237663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng jmp postamble 238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // defined(VGP_x86_darwin) 241663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end ---*/ 244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/ 245