* gc.c (set_heaps_increment): fix memory allocation strategy by
[ruby-svn.git] / ia64.s
blob92415b4e97cc5d998fedf14337300d9144e57fb2
1 // rb_ia64_flushrs and rb_ia64_bsp is written in IA64 assembly language
2 // because Intel Compiler for IA64 doesn't support inline assembly.
3 //
4 // This file is based on following C program compiled by gcc.
5 //
6 // void rb_ia64_flushrs(void) { __builtin_ia64_flushrs(); }
7 // void *rb_ia64_bsp(void) { return __builtin_ia64_bsp(); }
8 //
9 // Note that rb_ia64_flushrs and rb_ia64_bsp works in its own stack frame.
10 // It's because BSP is updated by br.call/brl.call (not alloc instruction).
11 // So rb_ia64_flushrs flushes stack frames including caller's one.
12 // rb_ia64_bsp returns the address next to caller's register stack frame.
14 // See also
15 // Intel Itanium Architecture Software Developer's Manual
16 // Volume 2: System Architecture.
18 .file "ia64.c"
19 .text
20 .align 16
21 .global rb_ia64_flushrs#
22 .proc rb_ia64_flushrs#
23 rb_ia64_flushrs:
24 .prologue
25 .body
26 flushrs
28 nop.i 0
29 br.ret.sptk.many b0
30 .endp rb_ia64_flushrs#
31 .align 16
32 .global rb_ia64_bsp#
33 .proc rb_ia64_bsp#
34 rb_ia64_bsp:
35 .prologue
36 .body
37 nop.m 0
39 mov r8 = ar.bsp
40 br.ret.sptk.many b0
41 .endp rb_ia64_bsp#
42 .ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)"