~bkerensa/ubuntu/raring/valgrind/merge-from-deb

« back to all changes in this revision

Viewing changes to coregrind/m_dispatch/dispatch-ppc32-linux.S

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2006-06-26 00:17:17 UTC
  • mto: This revision was merged to the branch mainline in revision 11.
  • Revision ID: james.westby@ubuntu.com-20060626001717-qi51nzty57cb12q6
Tags: upstream-3.2.0
Import upstream version 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
 
2
 
##--------------------------------------------------------------------##
3
 
##--- The core dispatch loop, for jumping to a code address.       ---##
4
 
##---                                             dispatch-ppc32.S ---##
5
 
##--------------------------------------------------------------------##
 
2
/*--------------------------------------------------------------------*/
 
3
/*--- The core dispatch loop, for jumping to a code address.       ---*/
 
4
/*---                                             dispatch-ppc32.S ---*/
 
5
/*--------------------------------------------------------------------*/
6
6
 
7
7
/*
8
8
  This file is part of Valgrind, a dynamic binary instrumentation
35
35
 
36
36
 
37
37
/*------------------------------------------------------------*/
38
 
/*--- The dispatch loop.                                   ---*/
 
38
/*---                                                      ---*/
 
39
/*--- The dispatch loop.  VG_(run_innerloop) is used to    ---*/
 
40
/*--- run all translations except no-redir ones.           ---*/
 
41
/*---                                                      ---*/
39
42
/*------------------------------------------------------------*/
40
43
 
41
 
/* signature: UWord VG_(run_innerloop) ( void* guest_state ) */
 
44
/*----------------------------------------------------*/
 
45
/*--- Preamble (set everything up)                 ---*/
 
46
/*----------------------------------------------------*/
42
47
 
43
 
        .globl  VG_(run_innerloop)
 
48
/* signature:
 
49
UWord VG_(run_innerloop) ( void* guest_state, UWord do_profiling );
 
50
*/
 
51
.text
 
52
.globl  VG_(run_innerloop)
 
53
.type  VG_(run_innerloop), @function
44
54
VG_(run_innerloop):
 
55
        /* r3 holds guest_state */
 
56
        /* r4 holds do_profiling */
 
57
 
45
58
        /* ----- entry point to VG_(run_innerloop) ----- */
46
 
 
47
59
        /* For Linux/ppc32 we need the SysV ABI, which uses
48
60
           LR->4(parent_sp), CR->anywhere.
49
 
           (The AIX ABI, used on Darwin, and maybe Linux/ppc64?,
 
61
           (The AIX ABI, used on Darwin,
50
62
           uses LR->8(prt_sp), CR->4(prt_sp))
51
63
        */
52
64
 
58
70
        stwu    1,-496(1)  /* sp should maintain 16-byte alignment */
59
71
 
60
72
        /* Save callee-saved registers... */
61
 
        /* r3 is live here (guest state ptr), so use r4 */
62
 
        lis     4,VG_(machine_ppc32_has_FP)@ha
63
 
        lwz     4,VG_(machine_ppc32_has_FP)@l(4)
64
 
        cmplwi  4,0
 
73
        /* r3, r4 are live here, so use r5 */
 
74
        lis     5,VG_(machine_ppc32_has_FP)@ha
 
75
        lwz     5,VG_(machine_ppc32_has_FP)@l(5)
 
76
        cmplwi  5,0
65
77
        beq     LafterFP1
66
78
 
67
79
        /* Floating-point reg save area : 144 bytes */
111
123
        /* It's necessary to save/restore VRSAVE in the AIX / Darwin ABI.
112
124
           The Linux kernel might not actually use VRSAVE for its intended
113
125
           purpose, but it should be harmless to preserve anyway. */
114
 
        /* r3 is live here (guest state ptr), so use r4 */
115
 
        lis     4,VG_(machine_ppc32_has_VMX)@ha
116
 
        lwz     4,VG_(machine_ppc32_has_VMX)@l(4)
117
 
        cmplwi  4,0
 
126
        /* r3, r4 are live here, so use r5 */
 
127
        lis     5,VG_(machine_ppc32_has_VMX)@ha
 
128
        lwz     5,VG_(machine_ppc32_has_VMX)@l(5)
 
129
        cmplwi  5,0
118
130
        beq     LafterVMX1
119
131
 
120
132
        /* VRSAVE save word : 32 bytes */
121
 
        mfspr   4,256         /* vrsave reg is spr number 256 */
122
 
        stw     4,244(1)
 
133
        mfspr   5,256         /* vrsave reg is spr number 256 */
 
134
        stw     5,244(1)
123
135
 
124
136
        /* Alignment padding : 4 bytes */
125
137
 
126
138
        /* Vector reg save area (quadword aligned) : 192 bytes */
127
 
        li      4,224
128
 
        stvx    31,4,1
129
 
        li      4,208
130
 
        stvx    30,4,1
131
 
        li      4,192
132
 
        stvx    29,4,1
133
 
        li      4,176
134
 
        stvx    28,4,1
135
 
        li      4,160
136
 
        stvx    27,4,1
137
 
        li      4,144
138
 
        stvx    26,4,1
139
 
        li      4,128
140
 
        stvx    25,4,1
141
 
        li      4,112
142
 
        stvx    24,4,1
143
 
        li      4,96
144
 
        stvx    23,4,1
145
 
        li      4,80
146
 
        stvx    22,4,1
147
 
        li      4,64
148
 
        stvx    21,4,1
149
 
        li      4,48
150
 
        stvx    20,4,1
 
139
        li      5,224
 
140
        stvx    31,5,1
 
141
        li      5,208
 
142
        stvx    30,5,1
 
143
        li      5,192
 
144
        stvx    29,5,1
 
145
        li      5,176
 
146
        stvx    28,5,1
 
147
        li      5,160
 
148
        stvx    27,5,1
 
149
        li      5,144
 
150
        stvx    26,5,1
 
151
        li      5,128
 
152
        stvx    25,5,1
 
153
        li      5,112
 
154
        stvx    25,5,1
 
155
        li      5,96
 
156
        stvx    23,5,1
 
157
        li      5,80
 
158
        stvx    22,5,1
 
159
        li      5,64
 
160
        stvx    21,5,1
 
161
        li      5,48
 
162
        stvx    20,5,1
151
163
LafterVMX1:
152
164
 
153
165
        /* Save cr */
159
171
        /* 32(sp) used later to check FPSCR[RM] */
160
172
 
161
173
        /* r3 holds guest_state */
162
 
        mr      31,3
163
 
        stw     3,28(1)       /* spill orig guest_state ptr */
 
174
        /* r4 holds do_profiling */
 
175
        mr      31,3      /* r31 (generated code gsp) = r3 */
 
176
        stw     3,28(1)   /* spill orig guest_state ptr */
164
177
 
165
178
        /* 24(sp) used later to stop ctr reg being clobbered */
166
 
 
167
 
        /* 8:20(sp) free */
 
179
        /* 20(sp) used later to load fpscr with zero */
 
180
        /* 8:16(sp) free */
168
181
        
169
182
        /* Linkage Area (reserved)
170
183
           4(sp)  : LR
171
184
           0(sp)  : back-chain
172
185
        */
173
186
 
174
 
// CAB TODO: Use a caller-saved reg for orig guest_state ptr
175
 
// - rem to set non-allocateable in isel.c
176
 
 
177
 
        /* hold dispatch_ctr in ctr reg */
178
 
        lis     17,VG_(dispatch_ctr)@ha
179
 
        lwz     17,VG_(dispatch_ctr)@l(17)
180
 
        mtctr   17
181
 
 
182
 
        /* fetch %CIA into r30 */
183
 
        lwz     30,OFFSET_ppc32_CIA(31)
 
187
        /* CAB TODO: Use a caller-saved reg for orig guest_state ptr
 
188
           - rem to set non-allocateable in isel.c */
 
189
 
 
190
        /* hold dispatch_ctr in r29 */
 
191
        lis     5,VG_(dispatch_ctr)@ha
 
192
        lwz     29,VG_(dispatch_ctr)@l(5)
184
193
 
185
194
        /* set host FPU control word to the default mode expected 
186
195
           by VEX-generated code.  See comments in libvex.h for
187
196
           more info. */
188
 
        lis     3,VG_(machine_ppc32_has_FP)@ha
189
 
        lwz     3,VG_(machine_ppc32_has_FP)@l(3)
190
 
        cmplwi  3,0
 
197
        lis     5,VG_(machine_ppc32_has_FP)@ha
 
198
        lwz     5,VG_(machine_ppc32_has_FP)@l(5)
 
199
        cmplwi  5,0
191
200
        beq     LafterFP2
192
201
 
193
 
        fsub    3,3,3   /* generate zero */
194
 
        mtfsf   0xFF,3
 
202
        /* get zero into f3 (tedious) */
 
203
        /* note: fsub 3,3,3 is not a reliable way to do this, 
 
204
           since if f3 holds a NaN or similar then we don't necessarily
 
205
           wind up with zero. */
 
206
        li      5,0
 
207
        stw     5,20(1)
 
208
        lfs     3,20(1)
 
209
        mtfsf   0xFF,3   /* fpscr = f3 */
195
210
LafterFP2:
196
211
 
197
212
        /* set host AltiVec control word to the default mode expected 
198
213
           by VEX-generated code. */
199
 
        lis     3,VG_(machine_ppc32_has_VMX)@ha
200
 
        lwz     3,VG_(machine_ppc32_has_VMX)@l(3)
201
 
        cmplwi  3,0
 
214
        lis     5,VG_(machine_ppc32_has_VMX)@ha
 
215
        lwz     5,VG_(machine_ppc32_has_VMX)@l(5)
 
216
        cmplwi  5,0
202
217
        beq     LafterVMX2
203
218
 
204
219
        vspltisw 3,0x0  /* generate zero */
208
223
        /* make a stack frame for the code we are calling */
209
224
        stwu    1,-16(1)
210
225
 
211
 
        /* fall into main loop */
212
 
 
213
 
/* Live regs:
214
 
        r1 (=sp)
215
 
        r30 (=CIA = jump address)
216
 
        r31 (=guest_state)
217
 
        ctr (=dispatch_ctr)
218
 
   Stack state:
219
 
        44(r1) (=orig guest_state)
220
 
*/
221
 
 
222
 
dispatch_boring:
223
 
        /* save the jump address in the guest state */
224
 
        stw     30,OFFSET_ppc32_CIA(31)
225
 
 
226
 
        /* Are we out of timeslice?  If yes, defer to scheduler. */
227
 
        bdz     counter_is_zero  /* decrements ctr reg */
228
 
 
229
 
        /* try a fast lookup in the translation cache */
230
 
        /* r4=((r30<<2) & (VG_TT_FAST_MASK<<2)) */
231
 
        rlwinm  4,30, 2, 32-2-VG_TT_FAST_BITS, 31-2  
232
 
// CAB: use a caller-saved reg for this ?
233
 
        addis   5,4,VG_(tt_fast)@ha
234
 
        lwz     5,VG_(tt_fast)@l(5)
235
 
        lwz     6,4(5)   /* big-endian, so comparing 2nd 32bit word */
236
 
        cmpw    30,6
 
226
        /* fetch %CIA into r3 */
 
227
        lwz     3,OFFSET_ppc32_CIA(31)
 
228
 
 
229
        /* fall into main loop (the right one) */
 
230
        /* r4 = do_profiling.  It's probably trashed after here,
 
231
           but that's OK: we don't need it after here. */
 
232
        cmplwi  4,0
 
233
        beq     VG_(run_innerloop__dispatch_unprofiled)
 
234
        b       VG_(run_innerloop__dispatch_profiled)
 
235
        /*NOTREACHED*/
 
236
 
 
237
/*----------------------------------------------------*/
 
238
/*--- NO-PROFILING (standard) dispatcher           ---*/
 
239
/*----------------------------------------------------*/
 
240
 
 
241
.global VG_(run_innerloop__dispatch_unprofiled)
 
242
VG_(run_innerloop__dispatch_unprofiled):
 
243
        /* At entry: Live regs:
 
244
                r1  (=sp)
 
245
                r3  (=CIA = next guest address)
 
246
                r29 (=dispatch_ctr)
 
247
                r31 (=guest_state)
 
248
           Stack state:
 
249
                44(r1) (=orig guest_state)
 
250
        */
 
251
 
 
252
        /* Has the guest state pointer been messed with?  If yes, exit. */
 
253
        lwz     5,44(1)         /* original guest_state ptr */
 
254
        cmpw    5,31
 
255
        bne     gsp_changed
 
256
 
 
257
        /* save the jump address in the guest state */
 
258
        stw     3,OFFSET_ppc32_CIA(31)
 
259
 
 
260
        /* Are we out of timeslice?  If yes, defer to scheduler. */
 
261
        subi    29,29,1
 
262
        cmplwi  29,0
 
263
        beq     counter_is_zero
 
264
 
 
265
        /* try a fast lookup in the translation cache */
 
266
        /* r4 = VG_TT_FAST_HASH(addr)           * sizeof(ULong*)
 
267
              = ((r3 >>u 2) & VG_TT_FAST_MASK)  << 2 */
 
268
        rlwinm  4,3, 0, 32-2-VG_TT_FAST_BITS, 31-2  
 
269
        addis   5,4,VG_(tt_fast)@ha
 
270
        lwz     5,VG_(tt_fast)@l(5)
 
271
        lwz     6,4(5)   /* big-endian, so comparing 2nd 32bit word */
 
272
        cmpw    3,6
 
273
        bne     fast_lookup_failed
 
274
 
 
275
        /* Found a match.  Call tce[1], which is 8 bytes along, since
 
276
           each tce element is a 64-bit int. */
 
277
        addi    8,5,8
 
278
        mtlr    8
 
279
 
 
280
        /* run the translation */
 
281
        blrl
 
282
 
 
283
        /* On return from guest code:
 
284
           r3  holds destination (original) address.
 
285
           r31 may be unchanged (guest_state), or may indicate further
 
286
           details of the control transfer requested to *r3.
 
287
        */
 
288
 
 
289
        /* start over */
 
290
        b       VG_(run_innerloop__dispatch_unprofiled)
 
291
        /*NOTREACHED*/
 
292
 
 
293
/*----------------------------------------------------*/
 
294
/*--- PROFILING dispatcher (can be much slower)    ---*/
 
295
/*----------------------------------------------------*/
 
296
 
 
297
.global VG_(run_innerloop__dispatch_profiled)
 
298
VG_(run_innerloop__dispatch_profiled):
 
299
        /* At entry: Live regs:
 
300
                r1 (=sp)
 
301
                r3  (=CIA = next guest address)
 
302
                r29 (=dispatch_ctr)
 
303
                r31 (=guest_state)
 
304
           Stack state:
 
305
                44(r1) (=orig guest_state)
 
306
        */
 
307
 
 
308
        /* Has the guest state pointer been messed with?  If yes, exit. */
 
309
        lwz     5,44(1)         /* original guest_state ptr */
 
310
        cmpw    5,31
 
311
        bne     gsp_changed
 
312
 
 
313
        /* save the jump address in the guest state */
 
314
        stw     3,OFFSET_ppc32_CIA(31)
 
315
 
 
316
        /* Are we out of timeslice?  If yes, defer to scheduler. */
 
317
        subi    29,29,1
 
318
        cmplwi  29,0
 
319
        beq     counter_is_zero
 
320
 
 
321
        /* try a fast lookup in the translation cache */
 
322
        /* r4 = VG_TT_FAST_HASH(addr)           * sizeof(ULong*)
 
323
              = ((r3 >>u 2) & VG_TT_FAST_MASK)  << 2 */
 
324
        rlwinm  4,3, 0, 32-2-VG_TT_FAST_BITS, 31-2 
 
325
        addis   5,4,VG_(tt_fast)@ha
 
326
        lwz     5,VG_(tt_fast)@l(5)
 
327
        lwz     6,4(5)   /* big-endian, so comparing 2nd 32bit word */
 
328
        cmpw    3,6
237
329
        bne     fast_lookup_failed
238
330
 
239
331
        /* increment bb profile counter */
240
 
// CAB: use a caller-saved reg for this ?
241
332
        addis   6,4,VG_(tt_fastN)@ha
242
333
        lwz     7,VG_(tt_fastN)@l(6)
243
334
        lwz     8,0(7)
249
340
        addi    8,5,8
250
341
        mtlr    8
251
342
 
252
 
        /* stop ctr being clobbered */
253
 
// CAB: use a caller-saved reg for this ?
254
 
//      but then (bdz) => (decr, cmp, bc)... still better than a stw?
255
 
        mfctr   9
256
 
        stw     9,40(1)  /* => 40-16 = 24(1) on our parent stack */
257
 
 
 
343
        /* run the translation */
258
344
        blrl
259
345
 
260
 
 
261
346
        /* On return from guest code:
262
 
           r3 holds destination (original) address.
263
 
 
 
347
           r3  holds destination (original) address.
264
348
           r31 may be unchanged (guest_state), or may indicate further
265
349
           details of the control transfer requested to *r3.
266
 
 
267
 
           If r31 is unchanged (== 44(r1)), just jump next to r3.
268
 
 
269
 
           Otherwise fall out, back to the scheduler, and let it
270
 
           figure out what to do next.
271
350
        */
272
351
 
273
 
        /* reinstate clobbered ctr */
274
 
        lwz     9,40(1)
275
 
        mtctr   9
276
 
 
277
 
        mr      30,3             /* put CIA (=r3) in r30 */
278
 
        lwz     16,44(1)         /* original guest_state ptr */
279
 
        cmpw    16,31
280
 
        beq     dispatch_boring  /* r31 unchanged... */
281
 
 
282
 
        mr      3,31             /* put return val (=r31) in r3 */
283
 
        b       dispatch_exceptional
 
352
        /* start over */
 
353
        b       VG_(run_innerloop__dispatch_profiled)
 
354
        /*NOTREACHED*/
 
355
 
 
356
/*----------------------------------------------------*/
 
357
/*--- exit points                                  ---*/
 
358
/*----------------------------------------------------*/
 
359
 
 
360
gsp_changed:
 
361
        /* Someone messed with the gsp (in r31).  Have to
 
362
           defer to scheduler to resolve this.  dispatch ctr
 
363
           is not yet decremented, so no need to increment. */
 
364
        /* %CIA is NOT up to date here.  First, need to write
 
365
           %r3 back to %CIA, but without trashing %r31 since
 
366
           that holds the value we want to return to the scheduler.
 
367
           Hence use %r5 transiently for the guest state pointer. */
 
368
        lwz     5,44(1)         /* original guest_state ptr */
 
369
        stw     3,OFFSET_ppc32_CIA(5)
 
370
        mr      3,31            /* r3 = new gsp value */
 
371
        b       run_innerloop_exit
 
372
        /*NOTREACHED*/
 
373
 
 
374
counter_is_zero:
 
375
        /* %CIA is up to date */
 
376
        /* back out decrement of the dispatch counter */
 
377
        addi    29,29,1
 
378
        li      3,VG_TRC_INNER_COUNTERZERO
 
379
        b       run_innerloop_exit
 
380
 
 
381
fast_lookup_failed:
 
382
        /* %CIA is up to date */
 
383
        /* back out decrement of the dispatch counter */
 
384
        addi    29,29,1
 
385
        li      3,VG_TRC_INNER_FASTMISS
 
386
        b       run_innerloop_exit
 
387
 
 
388
 
284
389
 
285
390
/* All exits from the dispatcher go through here.
286
391
   r3 holds the return value. 
295
400
        cmplwi  10,0
296
401
        beq     LafterFP8
297
402
 
298
 
/* This check avoidance may be removable if stfiwx is implemented. */
299
 
#if !defined(ENABLE_INNER)
300
 
        /* Check FPSCR & 0xFF == 0 (lowest 8bits are controls)  */
301
 
        mffs      4                       /* fpscr -> fpr */
302
 
        li        5,48
303
 
        stfiwx    4,5,1                   /* fpr to stack */
304
 
        lwzx      6,5,1                   /* load to gpr */
305
 
        andi.     6,6,0xFF                /* mask wanted bits */
306
 
        cmplwi    6,0x0                   /* cmp with zero */
307
 
        bne       invariant_violation     /* branch if not zero */
308
 
#endif
 
403
        /* Set fpscr back to a known state, since vex-generated code
 
404
           may have messed with fpscr[rm]. */
 
405
        li      5,0
 
406
        addi    1,1,-16
 
407
        stw     5,0(1)
 
408
        lfs     3,0(1)
 
409
        addi    1,1,16
 
410
        mtfsf   0xFF,3   /* fpscr = f3 */
309
411
LafterFP8:
310
412
 
311
413
        /* Using r11 - value used again further on, so don't trash! */
342
444
        addi    1,1,16
343
445
 
344
446
        /* Write ctr to VG(dispatch_ctr) */
345
 
        mfctr   17
346
 
        lis     18,VG_(dispatch_ctr)@ha
347
 
        stw     17,VG_(dispatch_ctr)@l(18)
 
447
        lis     5,VG_(dispatch_ctr)@ha
 
448
        stw     29,VG_(dispatch_ctr)@l(5)
348
449
 
349
450
        /* Restore cr */
350
451
        lwz     0,44(1)
438
539
        mtlr    0
439
540
        addi    1,1,496   /* stack_size */
440
541
        blr
441
 
 
442
 
 
443
 
/* Other ways of getting out of the inner loop.  Placed out-of-line to
444
 
   make it look cleaner. 
445
 
*/
446
 
dispatch_exceptional:
447
 
        /* this is jumped to only, not fallen-through from above */
448
 
        /* save r30 in %CIA and defer to sched */
449
 
        lwz     16,44(1)
450
 
        stw     30,OFFSET_ppc32_CIA(16)
451
 
        b       run_innerloop_exit
452
 
 
453
 
fast_lookup_failed:
454
 
        /* %CIA is up to date here since dispatch_boring dominates */
455
 
        mfctr   17
456
 
        addi    17,17,1
457
 
        mtctr   17
458
 
        li      3,VG_TRC_INNER_FASTMISS
459
 
        b       run_innerloop_exit
460
 
 
461
 
counter_is_zero:
462
 
        /* %CIA is up to date here since dispatch_boring dominates */
463
 
        mfctr   17
464
 
        addi    17,17,1
465
 
        mtctr   17
466
 
        li      3,VG_TRC_INNER_COUNTERZERO
467
 
        b       run_innerloop_exit
 
542
.size VG_(run_innerloop), .-VG_(run_innerloop)
 
543
 
 
544
 
 
545
/*------------------------------------------------------------*/
 
546
/*---                                                      ---*/
 
547
/*--- A special dispatcher, for running no-redir           ---*/
 
548
/*--- translations.  Just runs the given translation once. ---*/
 
549
/*---                                                      ---*/
 
550
/*------------------------------------------------------------*/
 
551
 
 
552
/* signature:
 
553
void VG_(run_a_noredir_translation) ( UWord* argblock );
 
554
*/
 
555
 
 
556
/* Run a no-redir translation.  argblock points to 4 UWords, 2 to carry args
 
557
   and 2 to carry results:
 
558
      0: input:  ptr to translation
 
559
      1: input:  ptr to guest state
 
560
      2: output: next guest PC
 
561
      3: output: guest state pointer afterwards (== thread return code)
 
562
*/
 
563
.global VG_(run_a_noredir_translation)
 
564
.type VG_(run_a_noredir_translation), @function
 
565
VG_(run_a_noredir_translation):
 
566
        /* save callee-save int regs, & lr */
 
567
        stwu 1,-256(1)
 
568
        stw  14,128(1)
 
569
        stw  15,132(1)
 
570
        stw  16,136(1)
 
571
        stw  17,140(1)
 
572
        stw  18,144(1)
 
573
        stw  19,148(1)
 
574
        stw  20,152(1)
 
575
        stw  21,156(1)
 
576
        stw  22,160(1)
 
577
        stw  23,164(1)
 
578
        stw  24,168(1)
 
579
        stw  25,172(1)
 
580
        stw  26,176(1)
 
581
        stw  27,180(1)
 
582
        stw  28,184(1)
 
583
        stw  29,188(1)
 
584
        stw  30,192(1)
 
585
        stw  31,196(1)
 
586
        mflr 31
 
587
        stw  31,200(1)
 
588
 
 
589
        stw  3,204(1)
 
590
        lwz  31,4(3)
 
591
        lwz  30,0(3)
 
592
        mtlr 30
 
593
        blrl
 
594
 
 
595
        lwz  4,204(1)
 
596
        stw  3,  8(4)
 
597
        stw  31,12(4)
 
598
 
 
599
        lwz  14,128(1)
 
600
        lwz  15,132(1)
 
601
        lwz  16,136(1)
 
602
        lwz  17,140(1)
 
603
        lwz  18,144(1)
 
604
        lwz  19,148(1)
 
605
        lwz  20,152(1)
 
606
        lwz  21,156(1)
 
607
        lwz  22,160(1)
 
608
        lwz  23,164(1)
 
609
        lwz  24,168(1)
 
610
        lwz  25,172(1)
 
611
        lwz  26,176(1)
 
612
        lwz  27,180(1)
 
613
        lwz  28,184(1)
 
614
        lwz  29,188(1)
 
615
        lwz  30,192(1)
 
616
        lwz  31,200(1)
 
617
        mtlr 31
 
618
        lwz  31,196(1)
 
619
        addi 1,1,256
 
620
        blr
 
621
.size VG_(run_a_noredir_translation), .-VG_(run_a_noredir_translation)
 
622
 
468
623
 
469
624
/* Let the linker know we don't need an executable stack */
470
625
.section .note.GNU-stack,"",@progbits
471
626
 
472
 
##--------------------------------------------------------------------##
473
 
##--- end                                                          ---##
474
 
##--------------------------------------------------------------------##
 
627
/*--------------------------------------------------------------------*/
 
628
/*--- end                                                          ---*/
 
629
/*--------------------------------------------------------------------*/