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